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序列文件。需要重复此步骤,直到同一个交换机的所有文件都结束。
答案 0 :(得分:1)
假设预期输出是近似的(即示例输出中的第二列可能不同):
awk -F_ '{
print $0, b[$3, $1]++
}' OFS=_ infile |
sort -t_ -k1,1 -k4,4n -k3n |
cut -d_ -f1-3
我没有彻底测试过剧本......