我有一个文件名目录,如:
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以随机顺序产生它们。
DataFile_100.txt
DataFile_2.txt
DataFile_19.txt
DataFile_9.txt
...我需要脚本的输出是按'_‘和’‘之间的数值顺序排列的文件。性格。我还没有找到一种方法来使用排序命令,在这些分隔符之间对数字值进行排序。
ls | sort -k 10 --human-numeric-sort仍然将-8.放在_79.之后,在_80.之前
发布于 2021-03-25 17:31:01
我们可以使用bash sort;
ls | sort -g -t '_' -k 2-g:一般数字排序-t:字段分隔符(_)-k:Key,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如果添加--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
____
________________
-> 发布于 2022-09-22 22:32:07
答案令人惊讶地容易--只需在第二列上强制数字排序。
$ 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.txthttps://stackoverflow.com/questions/66804436
复制相似问题