Операционная система UNIX. Руководство программиста

     

Взаимодействие с 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 на требуемое число.



Содержание раздела