awk中有多个if语句

时间:2016-03-10 20:50:32

标签: bash unix awk

我有一个看起来像

的文件
01/11/2015;998978000000;4890********3290;5735;ITUNES.COM/BILL;LU;Cross_border_rub;4065;17;915;INSUFF FUNDS;51;0;

有13个以分号分隔的列。

我正在尝试为所有行计算9列:

awk -F ';' -vOFS=';' '{ gsub(",", ".", $9); print }' file | 
awk -F ';' '$0 = NR-1";"$0' | 
awk -F ';' -vOFS=';' '{bar[$1]=$1;a[$1]=$2;b[$1]=$3;c[$1]=$4;d[$1]=$5;e[$1]=$6;f[$1]=$7;g[$1]=$8;h[$1]=$9;k[$1]=$10;l[$1]=$11;l[$1]=$12;m[$1]=$13;p[$1]=$14;};
if($7="International") {income=0.0162*h[i]+0.0425*h[i]};
else if($7="Domestic") {income=0.0188*h[i]};
else if($7="Cross_border_rub") {income=0.0162*h[i]+0.025*h[i]}
END{for(i in bar) print income";"a[i],b[i],c[i],d[i],e[i],f[i],g[i],h[i],k[i],l[i],m[i],p[i]}'

多个if语句在awk中是如何正确工作的?

1 个答案:

答案 0 :(得分:4)

awk救援!

您不需要多次awk次调用。可以合并成一个

$ awk -F';' -v OFS=';' '{gsub(",", ".", $9)}
      $7=="International" {income=(0.0162+0.0425)*$9}
      $7=="Domestic" {income=0.0188*$9}
      $7=="Cross_border_rub" {income=(0.0162+0.025)*$9}
  #  what happens for other values since previous income will be copied over
      {print income, NR-1, $0}' file

使用您的文件进行测试,因为您没有提供足够的样本进行测试。

如果您只是分配费率

,也许会更好
$ awk -F';' -v OFS=';' '{gsub(",", ".", $9); rate=0}
      $7=="International" {rate=0.0162+0.0425}
      $7=="Domestic" {rate=0.0188}
      $7=="Cross_border_rub" {rate=0.0162+0.025}
      {print rate*$9, NR-1, $0}' file