按数字字段(子字符串)对文件名进行排序

时间:2018-05-08 04:16:08

标签: bash sorting

我在文件夹A1中有一组文件,具有以下命名约定:

MCU1_0001_01 
MCU2_0002_01 
MCU1_0001_02 
MCU2_0002_02
MCU1_0003_01
MCU2_0003_02

中间的4位数值继续递增,直到值34,而MCU之后的值在1和2之间交替,并且字符串末尾的最后两位数也是如此。

话虽如此, 我想先根据中间值对这些文件进行排序,然后是字符串末尾的值,第二个。 注意,我也对排序" MCU"后面的值不感兴趣。

我该怎么做?

这就是我一直在尝试的

ls MCU[12]_00[0-9][0-9]_0[12] sort -t 

1 个答案:

答案 0 :(得分:1)

拆分_上的字段,并按字段2排序到3

$ ls | sort -t_ -k2,3
MCU1_0001_01
MCU1_0001_02
MCU2_0002_01
MCU2_0002_02
MCU1_0003_01
MCU2_0003_02

有关-t / --field-separator=SEP-k / --key=KEYDEF的说明,请参阅man sort

如果您的字段未填零,则需要使用-n进行数字排序:

sort -t_ -k2n -k3n

(按第二个字段的数值排序,然后按第三个字段的数值排序)。要调试sort解释字段的方式,请使用--debug标志运行。