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

       

Ввод из командной строки


Ранее, в разделе Запуск программы на выполнение, уже говорилось, что для того, чтобы задать awk-программу, которую требуется выполнить, можно либо вставить ее, заключив в одинарные кавычки, в командую строку, либо поместить в файл, а в командной строке указать имя этого файла, поместив перед ним флаг -f. Кроме того, в командной строке можно устанавливать значения переменных.

В awk'е значения переменным можно присваивать внутри awk-программы. Поскольку типы переменных не описываются, переменная создается просто посредством обращения к ней. Пример присваивания переменной нового значения:

x=5

Данный оператор awk-программы присваивает переменной x значение 5. Такой вид присваивания можно задать и в командной строке - это еще один способ указать исходные данные для awk-программы. Например, команда

awk '{ print x }' x=5 -

будет распечатывать значение 5 после прочтения очередной записи. Знак - в конце командной строки необходим для того, чтобы указать, что исходные данные надо брать со стандартного ввода, а не из файла с именем x=5. После ввода команды пользователь должен ввести исходные данные, завершив их сомволом CTRL+D.

Если исходные данные берутся из файла (например, с именем file1), команда должна выглядеть так:

awk '{ print x }' x=5 file1

Если необходимо изменить разделитель полей или разделитель записей, это также можно сделать в командной строке, как в следующем примере:

awk -f awkprog RS=":" file1

В данном примере разделитель записей устанавливается равным символу :. В результате программа, содержащаяся в файле awkprog, обрабатывает записи, разделенные не символами перевода строки, а двоеточиями; исходные данные берутся из файла file1. Подобным же образом в командной строке можно изменить разделитель полей.

Предусмотрена специальная опция, -Fx; если она указана, значение разделителя полей изменяется с пробела или табуляции на символ x. Например, командная строка

awk -F: -f awkprog file1

заменяет разделитель полей на символ :. Отметим, что если разделитель полей явно установлен равным табуляции (то есть при помощи опции -F или посредством присваивания переменной FS), пробелы не считаются разделителями полей. Однако обратное не верно: даже если разделитель полей явно установлен равным пробелу, табуляции тем не менее считаются разделителями полей.



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