如何按名称的某些子字符串对文件名列表进行排序?

如何按名称的某些子字符串对文件名列表进行排序?

我有许多文件,其名称如下:

beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf

我希望能够按各种nums 对这些文件名的列表进行排序,并将排序后的列表传递给各种命令行实用程序。例如,如果我按 排序num2,我想要的顺序是:

beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf

我有一个 python 脚本来执行此操作,但似乎是这样应该sed除了像和 之类的过滤器之外什么都没有可能sort

是否有任何简单的方法可以仅使用常见的命令行过滤器按文件名的各个部分进行排序?

答案1

sort具有该选项的GNU-g(--general-numeric-sort)应该能够做到这一点

sort -k5,5g -t '_'  <<!
beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
!
beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf

相关内容