2009-02-06 3 views

ответ

3

Для первых, вы не используете $ для переменных внутри AWK, попробуйте вместо этого:

fury> echo | awk -v e='he' '{print e}' 
he 

Для второго, ваше состояние NF означает NF = 0, так что будет печатать только для не! пустые строки:

fury> echo | awk 'NF {print "hello"}' 
fury> echo "7 8" | awk 'NF {print "hello"}' 
hello 

Я никогда не видел синтаксис для третьего, ARGV является одной двумерный массив, так что вы можете использовать:

fury> awk 'BEGIN {print ARGV[5]}' 1 2 3 4 5 6 7 
5 
fury> awk 'BEGIN {print ARGV[5] "\n" ARGV[3]}' 1 2 3 4 5 6 7 
5 
3 

Примечание. Я использую блок BEGIN для третьего, иначе он попытается открыть и обработать файлы 1, 2, 3, ... в качестве файлов.

+0

Что о с различными массивами? Могу ли я разделить элементы различных массивов друг на друга, как: 1 РАЗРЫВА 2 2 DIVIDE 4 => 0,5 0,5 возможно? –

2

Try:

echo "hello" | awk ' {print $0} ' 
echo "hello" | awk ' {print $1} ' 

Обратите внимание, что $ 0 возвращает все записи, и $ 1 только первую запись; awk начинает отсчеты на 1. Таким образом,

echo "hello1 hello2 hello3" | awk ' {print $0} ' 

возвращение приветствие1 привет2 привет. В то время как

echo "hello1 hello2 hello3" | awk ' {print $3} ' 

вернется hello3

Мне нравится этот awk tutorial.

3

Первые, основные сценарии оболочки здравомыслие:

  • Всегда приложить свой скрипт в одинарных кавычках

Примечания что скрипт это единственный аргумент - или имя файла с '-f file'.

Скрипт awk представляет собой последовательность «<pattern> <action>». Действие заложено в фигурных скобках «{}» для ясности - и здравого смысла, снова.

Как сказал Pax, первый пример должен быть:

awk -v -e e='he' '{ print e }' 

Второй пример непостижима - вы, вероятно, имел в виду:

awk '{ print "hello" }' 

переменная NF это число полей на линии. Вы можете получить AWK интерпретировать

awk 'NF { print "hello" }' 

как будто есть какие-либо данные по входной линии (NF! = 0, или число полей не равен нулю), а затем напечатать «привет».

Последний пример также непостижим; ARGV - это массив аргументов в awk, а в командной строке ничего нет. Но это одномерный массив. Ваша нотация суб-сценариев хочет рассматривать ее как словарь Python или хеш Perl с двумя индексами в сочетании. Вы в порядке - awk поддерживает ассоциативные массивы; но поскольку вы не добавили ничего в массив в ARGV [5,2], он ничего не печатает.

1

Кроме того, много полезной информации и учебные пособия на http://awk.info

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