2011-05-20 90 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 

我沒有測試腳本徹底雖然...