2016-04-29 34 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设置为分号;

相关问题