2012-07-24 113 views
0

我有一個這樣的文件:如何用awk和gsub替換文件中的數字(分別用NA,0101,0102和0202替換-1,0,1和2)?

hgfjk 
AX-75183725 2 2 -1 2 1 2 -1 0 

,我想通過NA010101020202分別替換-1012。所以我會得到:

hgfjk 
AX-75183725 0202 0202 NA 0202 0101 0202 NA 0101 

,我使用這個命令:

awk 'NR == 1 { print; next } NR>1{a=$1;$1="@";gsub(/ -1\>/,"NA");gsub(/<0\>/,"0101");gsub(/<1\>/,"0102");gsub(/\<2\>/,"0202");$1=a;print}' file > out 

,給了我這樣的輸出:

hgfjk 
AX-75183725 0202 2NA 0202 0102 2NA 0101 

我不知道什麼是錯的!有人可以幫助謝謝

回答

2

我會創建一個數組來替代值。並將計算每個領域,但第一個的每個位置。

awk ' 
    BEGIN { 
     subs="NA 0101 0102 0202"; 
     split(subs, subs_arr); 
    } 
    NR == 1 { 
     print; 
     next 
    } 
    NR>1{ 
     for (i = 2; i <= NF; i++) { 
      $i = subs_arr[ $i + 2 ]; 
     } 
     print 
    } 
' file 

運行前面的命令,將得到以下的輸出:

hgfjk 
AX-75183725 0202 0202 NA 0202 0102 0202 NA 0101 

編輯:我給了一個解決方案,但我想你不會因爲gsub(/<0\>/,"0101")gsub(/<1\>/,"0102")工作。您也應該跳過<,例如:gsub(/\<0\>/,"0101")gsub(/\<1\>/,"0102")