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

时间:2017-11-30 11:18:38

标签: gnu-sort

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

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.142.141.2

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

ls -1 *.txt | sort -V

有没有人对我如何调整它以给我所需的输出有任何建议?

1 个答案:

答案 0 :(得分:6)

您可以使用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:使用按字段排序2(数字),字段1(版本)