Скрипт AWk для проверки и выдачи ошибки для результата умножения - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно умножить данные column1 и column3 и сравнить их с column5. Необходимо проверить умножение и ошибку Throw, если результат больше или меньше значений column5, хотя разница +/- 2 будет в порядке

Пример - если для 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 file

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 голосов
/ 08 мая 2018

Используя объединение всех входных файлов, которые вы указали в качестве ввода:

$ 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

Вы не показали нам, каков будет ожидаемый результат, но, надеюсь, вы можете помассировать вышеперечисленное, чтобы получить то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...