我正在尝试对 ls 命令输出的一系列文件进行数字排序,这些文件与 ABCDE1234A1789.RST.txt
或 ABCDE12345A1789.RST.txt
模式匹配'789
' 字段。
在上面的示例模式中,ABCDE
对所有文件都是相同的,1234
或 12345
是不同的数字,但总是 4或 5 位数字的长度。 A1
对所有文件的长度都相同,但值可能会有所不同,因此很遗憾,它不能用作分隔符。第一个 .
之后的所有内容对于所有文件都是相同的。像这样的东西:
ls -l *.RST.txt | sort -k +9.13 | awk '{print $9} ' > file-list.txt
将匹配较短的文件名,但不会匹配较长的文件名,因为我要排序的字段之前的字符长度可变。
有没有一种方法可以完成对所有文件的排序,而无需首先填充较短的文件以使它们的长度相同?
最佳答案
Perl 助你一臂之力!
perl -e 'print "$_\n" for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'
如果您的 perl 更新(5.10 或更高版本),您可以将其缩短为
perl -E 'say for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'
关于perl - 在可变长度文件名中使用 bash 排序命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623364/