我只是想对CSV文件做一些基本的计算。
数据:
31590,Foo,70 28327,bar,291 25155,Baz,583 24179,Food,694 28670,Spaz,67 22190,bawk,4431 29584,alfred,142 27698,brian,379 24372,peter,22 25064,weinberger,8
这是我简单的awk脚本:
#!/usr/local/bin/gawk -f BEGIN { FPAT="([^,]*)|("[^"]+")"; OFS=","; OFMT="%.2f"; } NR > 1 END { if ($3>1336) $4=$3*0.03; if ($3<1336) $4=$3*0.05;}1**
错误的输出:
如何从一个string中提取一个string开始和结束用户定义的特殊字符?
删除文本文件中的单个字符行
置换列不重复
如何输出有效/无效input列表的计数?
每n行分割大量文本文件
31590,291 28327,583 25155,694 24179,67 28670,4431 22190,142 29584,379 27698,22 24372,8 25064,8
例外输出:
31590,70,3.5 28327,291,14.55 25155,583,29.15 24179,694,34.7 28670,67,3.35 22190,4431,132.93 29584,142,7.1 27698,379,18.95 24372,22,1.1 25064,8,.04
简单的算术是如果字段$ 3> 1336 = $ 3 * .03并且结果在字段$ 4字段$ 3 <1336 = $ 3 * .05并且结果在字段$ 4
显示不包含特定stringlinux的行
用SED或AWK删除文件中的行
运行sed来replace文件中的string
计算基于时间的指标(每小时)
转义反斜线时如何在行匹配后插入文件内容
不需要强制AWK重新编译每条记录(通过分配$ 4),只需打印当前记录,然后输出计算结果:
awk 'BEGIN{FS=OFS=","; OFMT="%.2f"} {print $0,$3*($3>1336?0.03:0.05)}' file
END块中不应该有任何东西
BEGIN { FS = OFS = "," OFMT="%.2f" } { if ($3 > 1336) $4 = $3 * 0.03 else $4 = $3 * 0.05 print }
这导致
31590,0.4
$ awk -F,-v OFS=,'{if ($3>1336) $4=$3*0.03; else $4=$3*0.05;} 1' data 31590,0.4
讨论
END块不会在每行的结尾执行,而是在整个文件的末尾执行。 因此,这里没有帮助。
原始代码有两个独立的条件, NR>1和1 。 每个的默认 *** 作是打印行。 这就是为什么在“错误的产出”中,第一个之后的所有行都在产出中翻了一番。
用awk :
awk -F,'$3>1336?$4=$3*.03:$4=$3*.05' file
conditional-Expression ? action1 : action2 ; conditional-Expression ? action1 : action2 ; 是awk中短得多的terinary *** 作符。
总结以上是内存溢出为你收集整理的awk如果陈述简单的math全部内容,希望文章能够帮你解决awk如果陈述简单的math所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)