AWk脚本检查并为乘法结果抛出错误

时间:2018-05-08 10:23:45

标签: bash awk scripting

我需要将column1和column3数据相乘,并需要将它与column5进行比较。 如果结果大于或小于column5值,则需要检查乘法和抛出错误,但+/- 2的差异将是正确的

Ex - 如果column1有2.4而column3有3.5,如果column5的值在row1(6.4到10.4),row2(248到252),row3(22634.8到22638.8)之间,则可以。 只需要检查乘法结果和抛出错误。 文件也有标题,但需要在验证时跳过标题。

正确的文件

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

Worng文件:

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}

1 个答案:

答案 0 :(得分: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

你没有告诉我们预期的输出是什么,但希望你可以按摩上面的o得到你想要的。