2016-04-29 28 views
1

我有這種格式的文件:如何刪除字符在特定的列,並與數除以它在bash

2015;1;1;11;7;19805;"2";12892;12478;"0900";"0853";-7.00;17.00;"0910";"1712";11.00;"1723";-6.00;329.00;330.00;302.00;2475.00; 

,我想刪除,列10 11,14,15和17 和引號然後除以2400這一列的數字。所以,而不是900我期待0.375(= 900/2400)。

最後的輸出應該在這個格式:

2015;1;1;11;7;19805;"2";12892;12478;0.375;0.355;-7.00;17.00;0.379;0.713;11.00;0.718;-6.00;329.00;330.00;302.00;2475.00; 

我想我知道如何去掉引號,但我肯定,其餘的失去了......或者是在Python等更容易?你能幫我嗎?

回答

3

這裏是您的情況GNU awk腳本:

rq.awk

BEGIN { FS=OFS=";" 
     OFMT="%.6g" # change output decimal format 
     # setup the field that should change: 
     split("10 11 14 15 17", ndx, " ") 
     } 

     { for(k in ndx) { 
      i=ndx[k] 
      gsub(/"/, "", $i) 
      $i=$i/2400 
     } 
     # print all fields 
     print 
     } 

運行它,它是這樣的:awk -f rq.awk your_file

    在開始的字段轉移到陣列 ndx
  • 的每一行:它遍歷ndx併爲NDX每個字段:
    • 替換什麼也沒有引號與gsub功能
    • 確實分割
  • print輸出所有的F ields包括修改字段
+1

完美... :-)。 –

1

另一種方式與awk破解這件事:

awk -F";" 'BEGIN{OFS=";"}function GSUB(F){gsub(/"/,"",$F);$F=$F/2400} {GSUB(10);GSUB(11);GSUB(14);GSUB(15);GSUB(1);print $0}' infile 

,它定義了替代了你的空雙引號的功能,然後除以2400然後,我們只是把它爲每個字段打印記錄。 BEGIN語句將輸出字段選擇器OFS設置爲分號;

相關問題