2017-06-22 41 views
1

我想按列標題(從左到右)對文件進行排序。 我想按字母數字從最小的數字排序到最大(這樣2 100 ...) 我想忽略排序中的第一列(第一列將保留爲第一列)。 我不想從上到下對列進行排序。在列表中按列標題從左到右對列進行排序

採樣輸入

FirstColumn Acolumn2 Acolumn10 Acolumn1 Bcolumn2 Bcolumn1 
Word  pan  mat  toy  grass bill 
string  tan  pat  boy  mass phil 
characters can  hat  coy  bass ted 

樣本輸出

FirstColumn Acolumn1 Acolumn2 Acolumn10 Bcolumn1 Bcolumn2 
Word  toy  pan  mat  bill  grass 
string  boy  tan  pat  phil  mass 
characters coy  can  hat  ted  bass 

回答

1
{ 
    if (NR == 1) 
    { 
      for (i=2;i<=NF+1;i++) 
      { 
        cnt[i]=gensub("column","","g",$i)"*"i 
      } 
    asort(cnt) 
    printf $1"\t" 
    } 
    for (i=2;i<=NF;i++) 
    { 
      split(cnt[i],cnt1,"*") 
      printf $cnt1[2]"\t" 
    } 
    printf "\n" 
} 

上面AWK代碼將工作的程度。

我們首先關注第一行並忽略第一列(從2開始for循環)我們從字符串中刪除「列」文本,然後將數據與索引位置一起添加到數組中(用一個星號)

然後,使用我們添加到數組中的索引對該數組進行排序和循環以打印出數據。

問題是正確排序數據。該標準排序將按照以下順序輸出數據:

Acolumn1 Acolumn10 Acolumn2 Bcolumn1 Bcolumn2

+0

感謝你,你知道爲什麼我收到這個錯誤? 「awk:cmd。line:1:(FILENAME = temp_folder/temp FNR = 1)fatal:除零試圖」 – Jacob

+1

將代碼放在一個文件中,然後用awk執行它-f awkcodefilename filenamewithtexttosort –

+0

謝謝,第一列完全。你知道如何將該列輸出作爲第一列 – Jacob

相關問題