首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据字符串集中两个不同分隔符之间的数值进行bash排序

如何根据字符串集中两个不同分隔符之间的数值进行bash排序
EN

Stack Overflow用户
提问于 2021-03-25 17:14:07
回答 2查看 243关注 0票数 0

我有一个文件名目录,如:

代码语言:javascript
复制
DataFile_1.txt
DataFile_2.txt
...
DataFile_9.txt
DataFile_10.txt
DataFile_11.txt
...
DataFile_99.txt
DataFile_100.txt
DataFile_101.txt
...

他们不在上面的顺序,但我希望他们是。ls以随机顺序产生它们。

代码语言:javascript
复制
DataFile_100.txt
DataFile_2.txt
DataFile_19.txt
DataFile_9.txt
...

我需要脚本的输出是按'_‘和’‘之间的数值顺序排列的文件。性格。我还没有找到一种方法来使用排序命令,在这些分隔符之间对数字值进行排序。

ls | sort -k 10 --human-numeric-sort仍然将-8.放在_79.之后,在_80.之前

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-25 17:31:01

我们可以使用bash sort

代码语言:javascript
复制
ls | sort -g -t '_' -k 2
  • -g:一般数字排序
  • -t:字段分隔符(_)
  • -k:Key,2的意思是:获得第二个(在-t之后)

示例:

代码语言:javascript
复制
-> ls -t
DataFile_42.txt  DataFile_162.txt  DataFile_15.txt  DataFile_1.txt
->
-> ls | sort -g -t '_' -k 2
DataFile_1.txt
DataFile_15.txt
DataFile_42.txt
DataFile_162.txt

如果添加--debug选项,我们可以直观地看到-t-k是如何工作的:

代码语言:javascript
复制
-> ls | sort -g -t '_' -k 2 --debug
sort: text ordering performed using simple byte comparison
sort: key 1 is numeric and spans multiple fields
DataFile_1.txt
         __
______________
DataFile_15.txt
         ___
_______________
DataFile_42.txt
         ___
_______________
DataFile_162.txt
         ____
________________
-> 
票数 4
EN

Stack Overflow用户

发布于 2022-09-22 22:32:07

答案令人惊讶地容易--只需在第二列上强制数字排序。

代码语言:javascript
复制
$ cat files.txt 
DataFile_100.txt
DataFile_2.txt
DataFile_9.txt
DataFile_10.txt
DataFile_1.txt
DataFile_101.txt
DataFile_11.txt
DataFile_99.txt

$ cat files.txt | sort -t'_' -k2,2n
DataFile_1.txt
DataFile_2.txt
DataFile_9.txt
DataFile_10.txt
DataFile_11.txt
DataFile_99.txt
DataFile_100.txt
DataFile_101.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66804436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档