按分隔符对文件名进行主要和次要数字排序

Primary and secondary numerical sorting of file names by delimiter

我有一些这样命名的文件:

S241R39.txt
S241R40.txt
S241R41.1.txt
S241R41.2.txt
S241R42.1.txt
S241R42.2.txt

我希望能够按以下顺序对这些进行排序:

S241R39.txt
S241R40.txt
S241R41.1.txt
S241R42.1.txt
S241R41.2.txt
S241R42.2.txt

在这里,我希望41.142.1之前,42.141.2

之前

在不以 .1.2 结尾的文件中,这对我的文件进行了正确排序:

ls -1 *.txt | sort -V

有没有人对我如何调整它以获得我想要的输出有任何建议?

您可以使用 sort -t . -k2n -k1n:

printf '%s\n' *.txt | sort -t . -k2n -k1V

S241R39.txt
S241R40.txt
S241R41.1.txt
S241R42.1.txt
S241R41.2.txt
S241R42.2.txt

sort 正在使用的命令是:

  • -t .: 使点成为字段分隔符
  • -k2n -k1V:使用按field2(数字)、field1(版本)排序