Я знаю, что awk
это скриптовый язык программирования, но иногда я путаю, когда я его интерпретирую — как команду, а когда — как программу.
Например, 1-Здесь я интерпретирую как команду:
awk '{print $2}' file.txt
Например, 2-Здесь я интерпретирую как программу awk:
awk 'BEGIN {skip = 0} \
skip == 0 {if (NF == 0)
{skip = 1} \
else
{print}; \
next} \
skip == 1 {print; \
skip = 0; \
next}'
Взято изздесь.
Вопросы следующие:
- Когда awk следует интерпретировать как команду?
- Когда awk — это программа?
- Возникла проблема с вызовом моего первого примера в качестве
awk
команды?
Что-то вроде:
awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'
означает, что awk
программы могут общаться с помощью каналов?
решение1
awk
имеет два режима вызова: один с текстом программы в командной строке, а другой с программой из файла. Это указано в синопсисе страницы руководства awk (эта страница взята из mawk на Ubuntu 12.04):
mawk [-W option] [-F value] [-v var=value] [--] 'program text' [file
...]
mawk [-W option] [-F value] [-v var=value] [-f program-file] [--]
[file ...]
Называть первую форму программой или нет, зависит от определения программы, которое вы хотите использовать. Я бы сказал, что обе формы включают программы, причем в первой программа указывается как аргумент командной строки. Оба ваших примера относятся к первой форме, поскольку ни один из них не включает опцию -f
. То, что во втором примере есть многострочный аргумент командной строки, в этом отношении не имеет значения.
Это не уникально для awk
. Например, python по умолчанию интерпретирует аргумент командной строки как имя программы, но с помощью -c
опции можно указать программу в командной строке (т. е. по умолчанию все наоборот awk
).
Независимо от этого, это связь с использованием каналов. Это заботится синтаксисом оболочки и ОС, единственное, что нужно сделать вашему скрипту, это записать в stdout, reps. прочитать из stdin. Так что да, awk
программы могут общаться через каналы.
решение2
Строго говоря, когда вы звонитеawk, вы ссылаетесь на переводчика, а не на язык. Язык называетсяАВК.
awk
(или mawk
, nawk
) — это всего лишь утилита, которая будет выполнять программы, написанные на AWK
языке программирования.
Согласно определению POSIX,программа awkявляется:
программа
Если опция -f не указана, первым операндом для awk будет текст программы awk. Приложение должно предоставить операнд программы как один аргумент для awk. Если текст не заканчивается на , awk будет интерпретировать текст так, как если бы он заканчивался на .
Так что если вы не используете -f
option, вы можете рассматривать два ваших примера как программу awk.