Во-первых, здравый смысл сценариев оболочки:
- Всегда заключайте ваш скрипт в одинарные кавычки
Обратите внимание, что сценарий представляет собой один аргумент или имя файла с -f file
.
Скрипт awk - это последовательность пар <pattern> <action>
. Действие заключено в фигурные скобки «{}
» для ясности и здравомыслия, опять же.
Как сказал Пакс, первый пример должен быть:
awk -v -e e='he' '{ print e }'
Второй пример непостижим - вы, вероятно, имели в виду:
awk '{ print "hello" }'
Переменная NF - это количество полей в строке. Вы можете получить awk для интерпретации
awk 'NF { print "hello" }'
если в строке ввода есть какие-либо данные (NF! = 0 или число полей не равно нулю), то выведите 'hello'.
Последний пример также непостижим; ARGV - это массив аргументов для awk, и командная строка не предоставила ни одного. Но это одномерный массив. Ваша нотация под-сценариев хочет обрабатывать ее как словарь Python или хэш Perl с двумя объединенными индексами. Вы в порядке - awk поддерживает ассоциативные массивы; но поскольку вы не добавили ничего в массив в ARGV [5,2], он ничего не напечатает.