我需要将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}
答案 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得到你想要的。