2011-05-20 159 views
-1
A_xyz_01 
B_mdd_01 
A_djk_02 
A_jfc_03 
B_dmk_01 
A_bcd_01 
B_csd_02 
B_dlf_03 
A_jhf_02 
B_dld_02 

我想根据seq号码(每行的最后两位数字)对这行进行排序,如下max seq是03,03之后我需要seq 01开关ID(行A,B中的第一个字符):根据序列号排序

A_xyz_01 
A_djk_02 
A_jfc_03 
A_bcd_01 
A_jhf_02 
B_dmk_01 
B_csd_02 
B_dlf_03 
B_mdd_01 
B_dld_02 

上面的列表实际上是ls命令的输出。 我有来自不同交换机(A,B,C)的文件。他们的序列号是第三个字段。对于每一个我需要用文件名称做文件的文件都做了其他的事情。 但这应该是一次完成一个开关,我也需要按顺序执行(考虑第三个字段)。如果序列是最大的,我需要将文件与01作为序列,但是从不同的文件较早的01序列文件。此步骤需要重复,直到同一交换机的所有文件都结束。

+0

问题不一点都不清楚。你想按第一列排序吗?为什么'A_bcd_01'跟着'A_jfc_03'? – 2011-05-20 07:02:22

+0

我想先排序第一列,然后分别为第三列和第二列我不在乎第二列 – Vijay 2011-05-20 07:06:44

+2

这仍然不能解释为什么'B_mdd_01'出现在'B_dlf_03'之后。 – 2011-05-20 07:09:30

回答

1

假设预期输出是近似的(即在本例中输出的第二列可能会有所不同):

awk -F_ '{ 
    print $0, b[$3, $1]++ 
    }' OFS=_ infile | 
    sort -t_ -k1,1 -k4,4n -k3n | 
     cut -d_ -f1-3 

我没有测试脚本彻底虽然...