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

fug*_*ugu -1 gnu-sort

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

S241R39.txt
S241R40.txt
S241R41.1.txt
S241R41.2.txt
S241R42.1.txt
S241R42.2.txt
Run Code Online (Sandbox Code Playgroud)

我希望能够按此顺序对它们进行排序:

S241R39.txt
S241R40.txt
S241R41.1.txt
S241R42.1.txt
S241R41.2.txt
S241R42.2.txt
Run Code Online (Sandbox Code Playgroud)

在这里,我41.1想来之前42.1,42.1之前来41.2

在没有结束的文件中.1或者.2正确地对我的文件进行排序:

ls -1 *.txt | sort -V

有没有人有任何建议我如何调整这个给我我想要的输出?

anu*_*ava 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
Run Code Online (Sandbox Code Playgroud)

sort 使用的命令是:

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