Bash 用于检查并抛出乘法结果错误的AWk脚本
我需要将第1列和第3列数据相乘,并将其与第5列进行比较。 如果结果大于或小于第5列的值,则需要检查乘法和抛出错误,尽管+/-2的差值可以 Ex-如果第1列的值为2.4,第3列的值为3.5,那么第5列的值在第1行(6.4到10.4)、第2行(248到252)、第3行(22634.8到22638.8)的范围内就可以了 只需要检查乘法结果并抛出错误。 文件也有头,但在验证时需要跳过头 正确的文件Bash 用于检查并抛出乘法结果错误的AWk脚本,bash,awk,scripting,Bash,Awk,Scripting,我需要将第1列和第3列数据相乘,并将其与第5列进行比较。 如果结果大于或小于第5列的值,则需要检查乘法和抛出错误,尽管+/-2的差值可以 Ex-如果第1列的值为2.4,第3列的值为3.5,那么第5列的值在第1行(6.4到10.4)、第2行(248到252)、第3行(22634.8到22638.8)的范围内就可以了 只需要检查乘法结果并抛出错误。 文件也有头,但在验证时需要跳过头 正确的文件 a|b|c|d|e 2.4||3.5||8.4 5||50||250 6.55||3456||22636.
a|b|c|d|e
2.4||3.5||8.4
5||50||250
6.55||3456||22636.8
正确的文件
a|b|c|d|e
2.4||3.5||7.4
5||50||251
6.55||3456||22635.8
工作文件:
a|b|c|d|e
2.4||3.5||6.3
5|50|247
6.55||3456||22634.4
Worng文件
a|b|c|d|e
2.4||3.5||10.5
5||50||253
6.55||3456||22638.9
这似乎可以检查大于2的结果
if ($5 > $1 * $3 + 2 ) {print "Error 401: column1 and colmn3 does not match with column5,Field position 5, Linenumber:"NR,$0}
但下面并没有检查结果是否小于2,若乘法结果等于$5,则抛出错误
if ($5 > $1 * $3 - 2 ) {print "Error 402: column1 and colmn3 does not match with column5,Field position 5, Linenumber:"NR,$0}
使用作为输入提供的所有输入文件的串联:
$ cat tst.awk
BEGIN { FS="|" }
NR>1 { print $0 "\tis " (abs($5-($1*$3)) > 2 ? "bad" : "good") }
function abs(val) { return (val<0 ? -val : val) }
$ awk -f tst.awk file
2.4||3.5||8.4 is good
5||50||250 is good
6.55||3456||22636.8 is good
2.4||3.5||7.4 is good
5||50||251 is good
6.55||3456||22635.8 is good
2.4||3.5||6.3 is bad
5|50|247 is bad
6.55||3456||22634.4 is bad
2.4||3.5||10.5 is bad
5||50||253 is bad
6.55||3456||22638.9 is bad
$cat tst.awk
开始{FS=“|”}
NR>1{打印$0“\tis”(abs($5-($1*$3))>2?“坏”:“好”)}
函数abs(val){return(val)您需要bash
脚本还是awk
脚本?标题在哪里?向我们展示它在每个file@Inian...bash脚本..抱歉..请编辑我的帖子抱歉,这不是StackOverflow的工作方式。表格“我想做X,请给我提示和/或示例代码”中的问题被认为是离题的。请访问并阅读,特别是阅读@kvantour..抱歉..我也会发布我尝试过的代码..您打算如何在shell脚本中使用此脚本?或($5-$1*$3)^2>4
Hi@Ed Morton..我不需要任何输出..只想打印另一个文件中标题为的坏记录行,这些行的乘法结果偏差大于+/-2。只想打印坏记录行…
-这就是输出。编辑您的问题以显示它。