Взаимодействие с shell'ом
Обычно awk-программа либо помещается в файл, либо указывается в командной строке (при этом ее текст заключается в одинарные кавычки):
awk '{ print $1 }' ...
Использование одинарных кавычек позволяет избежать интерпретации shell'ом текста awk-программы. Это необходимо, потому что многие специальные символы awk'а совпадают со специальными сим- волами shell'а (например, $ или ").
Предположим, требуется написать awk-программу, печатающую n-ое поле записи, где n - параметр, задаваемый во время запуска программы. Более подробно, мы хотим написать программу с именем field, которая по запросу
field n
выполняла бы команду
awk '{ print $n }'
Как передать значение n в awk-программу?
Это можно сделать несколькими способами. Во-первых, можно поместить в файл field строку
awk '{ print $'$1' }'
В данном случае существенно отсутствие пробелов: эта запись воспринимается как единый аргумент, несмотря на то, что указаны две пары кавычек. $1 находится вне кавычек, доступен shell'у и, следовательно, должным образом подставится в текст программы при выполнении shell-процедуры field.
Еще один способ решения задачи основывается на том, что shell интерпретирует $-параметры, которые содержатся в цепочках, заключенных в двойные кавычки:
awk "{ print \$ $1 }"
Небольшая хитрость состоит в экранировании первого символа $ с помощью \; $1, как и в предыдущем случае, заменяется при обращении к field на требуемое число.