我有一个文件名目录,例如:
DataFile_1.txt
DataFile_2.txt
...
DataFile_9.txt
DataFile_10.txt
DataFile_11.txt
...
DataFile_99.txt
DataFile_100.txt
DataFile_101.txt
...
Run Code Online (Sandbox Code Playgroud)
它们不是按上述顺序排列的,但我希望它们是这样的。ls 以随机顺序生成它们,例如
DataFile_100.txt
DataFile_2.txt
DataFile_19.txt
DataFile_9.txt
...
Run Code Online (Sandbox Code Playgroud)
我需要脚本的输出是按“_”和“.”之间的数值排序的文件。特点。我无法找到一种方法来使用排序命令,以人类的方式对这些分隔符之间的数值进行排序。
ls | sort -k 10 --human-numeric-sort仍然把 the 放在-8.the 之后_79.和之前_80.
ls | sort -g -t '_' -k 2
Run Code Online (Sandbox Code Playgroud)
-g:按一般数字排序-t: 字段分隔符 ( _)-k: 键,2表示:获取第二列(在 之后-t)例子:
-> 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
Run Code Online (Sandbox Code Playgroud)
如果添加该--debug选项,我们可以直观地看到-t和 的-k工作原理:
-> 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
____
________________
->
Run Code Online (Sandbox Code Playgroud)