2015-03-27 3 views
1

Я пишу программу, которая берет данные «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.

Что я делаю неправильно?

+1

Вы смотрите на «ряды 4 и 6» или «столбцы 4 и 6»? Похоже, что вы могли бы означать/предполагать: 'if ($ 1 == 4 || $ 1 == 7 || $ 1 == 9 || ($ 4 <= 9000 && $ 6 <= 9000))'. Если вы действительно намереваетесь «строки 4 и 6», вам нужно сравнить переменную «NR» с этими числами, и ... ну, это неоднозначно, что это означает, когда вы говорите «те, которые имеют числа менее 9000 в строках 4 и 6 «К счастью, вы, вероятно, не имеете в виду это. Независимо от того, что вы намерены, ответ заключается в том, чтобы убедиться, что вы поставили достаточное количество скобок в состояние, чтобы гарантировать, что оно недвусмысленно как для людей, так и для компьютеров, которые должны его прочитать. –

+0

I ($ 1 == 4 || $ 1 == 7 || $ 1 == 7) и ($ 4 <= 9000 && $ 6 <= 9000), чтобы оба были истинными. Я просматриваю столбцы $ 1, $ 4 и $ 6 для каждого строка данных. – rootusercyclone

ответ

2

Вы должны сгруппировать вместе 'или' заявления:

awk '{if (($1 == 4 || $1 == 7 || $1 == 9) && $4 <= 9000 && $6 <= 9000) print $2/10,$3/1e3,$4/10,$5/10,$6,$7/10}' 
+0

Это сработало, спасибо вам большое! – rootusercyclone

0

Вы можете сделать это следующим образом:

awk '$1~"^(4|7|9)$" && $4 <= 9000 && $6 <= 9000) {print $2/10,$3/1e3,$4/10,$5/10,$6,$7/10}' file 

или как это:

$1~"^[479]$" 

Но это нехорошее решение, если у вас есть номера wit h больше цифр.

Смежные вопросы