在可变长度文件名中使用bash sort命令

Mic*_*ech 5 sorting bash perl awk command-line

我试图在数字上对ls命令输出的一系列文件进行排序,这些文件与模式ABCDE1234A1789.RST.txtABCDE12345A1789.RST.txt' 789'字段匹配.

在上面的示例模式中,ABCDE对于所有文件都是相同的,1234或者12345是变化但总是长度为4或5位的数字.A1所有文件的长度都相同,但值可能会有所不同,所以不幸的是它不能用作分隔符.第一个之后的.所有内容对于所有文件都是相同的.就像是:

ls -l *.RST.txt | sort -k +9.13 | awk '{print $9} ' > file-list.txt
Run Code Online (Sandbox Code Playgroud)

将匹配较短的文件名但不匹配较长的文件名,因为在我要排序的字段之前字符的长度可变.

有没有办法完成所有文件的排序,而无需先填充较短长度的文件,使它们长度相同?

cho*_*oba 4

Perl 来救援!

perl -e 'print "$_\n" for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'
Run Code Online (Sandbox Code Playgroud)

如果您的 Perl 较新(5.10 或更新版本),您可以将其缩短为

perl -E 'say for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'
Run Code Online (Sandbox Code Playgroud)