【发布时间】:2016-03-10 20:50:31
【问题描述】:
我有一个看起来像这样的文件
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 中正确工作?
【问题讨论】:
-
主循环中的
i是什么(END块之前)? -
我认为如果您指定要计算的内容,您将获得更好的帮助。我可以在发布的代码中看到许多效率低下的地方。
-
if () ... else if () ...在 awk 中运行良好,但您显示的条件可以更好地放置为模式。 '$7 == "国际" { 收入=0.0162*h[i]+0.0425*h[i]}' -
$7 每行只有一个值——您可以将 awk 视为输入文件中每一行的 for 循环。
-
以后,学习使用编辑框左上角的
{}工具来保持代码/数据/errMsgs/等的正确格式。此外,仅仅因为您的数据有 19 列,问题是否如此独特以至于所有值对于生成解决方案都很重要?如果你真的有一个 19 方面的问题,也许你需要考虑聘请顾问。通常,3-4 列应该足够该数据的预期输出。好的?!? :-) 谢谢,麻烦您了。祝你好运。