Я пишу программу, которая берет данные «Radiosonde Weather Balloon» и записывает их в новый файл.Использование инструкции if в awk в сценарии bash
Данные структурированы таким образом, что имеется 7 столбцов. Я заинтересован только в строках, которые имеют 4
, 7
или 9
в первом столбце, а также номера меньше или равна 9000 в обеих колонках 4 и 6.
Это то, что я написал:
awk '{if ($1 == 4 || $1 == 7 || $1 == 9 && $4 <= 9000 && $6 <= 9000) print $2/10,$3/1e3,$4/10,$5/10,$6,$7/10}' $1 > sonde_tv
Мой выходной файл имеет только строки, которые имеют 4
, 7
, или в первой позиции 9
, но он все равно будет иметь данные более 9000 в колонках 4
и 6
.
Что я делаю неправильно?
Вы смотрите на «ряды 4 и 6» или «столбцы 4 и 6»? Похоже, что вы могли бы означать/предполагать: 'if ($ 1 == 4 || $ 1 == 7 || $ 1 == 9 || ($ 4 <= 9000 && $ 6 <= 9000))'. Если вы действительно намереваетесь «строки 4 и 6», вам нужно сравнить переменную «NR» с этими числами, и ... ну, это неоднозначно, что это означает, когда вы говорите «те, которые имеют числа менее 9000 в строках 4 и 6 «К счастью, вы, вероятно, не имеете в виду это. Независимо от того, что вы намерены, ответ заключается в том, чтобы убедиться, что вы поставили достаточное количество скобок в состояние, чтобы гарантировать, что оно недвусмысленно как для людей, так и для компьютеров, которые должны его прочитать. –
I ($ 1 == 4 || $ 1 == 7 || $ 1 == 7) и ($ 4 <= 9000 && $ 6 <= 9000), чтобы оба были истинными. Я просматриваю столбцы $ 1, $ 4 и $ 6 для каждого строка данных. – rootusercyclone