按分隔符对文件名进行主要和次要数字排序
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.1
在42.1
之前,42.1
在41.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(版本)排序
我有一些这样命名的文件:
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.1
在42.1
之前,42.1
在41.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(版本)排序