где поставить скобки в awk - PullRequest
2 голосов
/ 06 октября 2011

Привет всем, я хочу спросить, что я очень-очень запутался в скобках {} в awk, как будто я написал код

{
   FNR == 3 { print $1 " age is " $2 }
}

, но он дал мне ошибку во внешних скобках, но не сделалдать ошибку в скобках вокруг оператора print, почему это так: / также в следующем коде

{
 s = $1
 d = $2
 no = $1 + $2
 {print no}
}

когда я удаляю внешние скобки, отображаются мои аргументы, количество раз LOC, почему это, я очень запуталсяпожалуйста, помогите мне спасибо

1 Ответ

3 голосов
/ 06 октября 2011

Скрипт awk состоит из команд.У каждой команды есть шаблон и действие:

pattern1 { action1 }
pattern2 { action2 }

Для каждой строки входных данных awk проверяет каждый шаблон и выполняет соответствующее действие, когда шаблон истинен.

Шаблон может быть опущен, и в этом случае он принимается как всегда true, и действие выполняется для каждой строки.Точно так же действие может быть опущено, и в этом случае оно принимается как print;это позволяет вам легко использовать awk для выбора строк без их изменения.

Имея в виду эту структуру, мы можем интерпретировать приведенные примеры.Первый - это отдельное действие, которое применяется к каждой строке.Но действие не правильно сформировано - если вы удалите внешние скобки, оно станет отличным шаблоном и действием, оба из которых построены правильно.

Второй пример также применяется к каждой строке.Он берет первые два (разделенные пробелами) поля из строк, добавляет их в виде чисел и печатает результат.Снятие внешних скобок дает три шаблона без соответствующих действий и действие без шаблона.Таким образом, шаблоны - которые являются значением присваиваний и обычно истинны - имеют неявный print, который обычно вызывается.Точно так же действие всегда вызывается, печатая значение no.

...