按数字和字符反向排序?

按数字和字符反向排序?

我有一个文件列表,例如:

100119329_d01.png
100119329_d08.png
100119329_d02.png
100119329_d05.png
100119329_d03.png
100119329_d04.png
100119329_d07.png
100119329_f02.png
100119329_f01.png

我想按数字排序,然后按前一个字符反向排序以获得以下输出:

100119329_f01.png
100119329_f02.png
100119329_d01.png
100119329_d02.png
100119329_d03.png
100119329_d04.png
100119329_d05.png
100119329_d07.png
100119329_d08.png

我试过了:

cat <file> |sort -k1.11r -k1.12,1.13n

但一次只有一个论点有效。所以我只能按数字或反转字符排序。我怎样才能让两者同时工作?

答案1

仅对第 11 个字符进行反向排序,例如

sort -k1.11,1.11r -k1.12,1.13n infile

虽然在这种情况下(数字用零填充)你可以简单地运行

sort -k1.11,1.11r infile

答案2

如果目标是随后使用 zsh 按该顺序处理这些文件,则可以使用 glob 限定符完成排序:

$ print -rC1 -- *_?[0-9][0-9].png(Oe['REPLY=$REPLY[-7]$((200-REPLY[-6,-5]))'])
100119329_f01.png
100119329_f02.png
100119329_d01.png
100119329_d02.png
100119329_d03.png
100119329_d04.png
100119329_d05.png
100119329_d07.png
100119329_d08.png

我们是否根据某些将排序键定义为的代码的评估O结果进行反向排序(大写)e已关注 200 -号码。所以 的关键100119329_f01.pngf199, 的关键100119329_a99.pnga101

要对这些文件执行其他操作:

for file ( *_?[0-9][0-9].png(Oe['REPLY=$REPLY[-7]$((200-REPLY[-6,-5]))']) )
  anything-else-with -- $file

例如。

相关内容