根据序列号排序

时间:2011-05-20 06:56:04

标签: bash unix sed awk

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)的文件。他们将序列号作为第三个字段。对于每个文件我需要取ile的名称做其他事情。 但这应该一次完成一个开关我也需要按顺序进行(考虑到第三个字段)。如果序列是最大的,我需要将文件与01一样作为序列,但是不同的文件来自早期的01序列文件。需要重复此步骤,直到同一个交换机的所有文件都结束。

1 个答案:

答案 0 :(得分:1)

假设预期输出是近似的(即示例输出中的第二列可能不同):

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

我没有彻底测试过剧本......