awk如果陈述简单的math

awk如果陈述简单的math,第1张

概述awk如果陈述简单的math

我只是想对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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1271084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存