Вывод в каналы
Вывод можно направить не только в обычный файл, но и в канал. Пример:
{ if ($2 == "XX") print | "mailx mary" }
где mary - имя, под которым пользователь входит в систему. Любая запись со вторым полем, равным XX, отправляется пользователю mary в виде почты. awk ждет, пока не выполнится программа целиком, а затем выполняется команда, соединенная с ней каналом [в данном случае - команда mailx(1)]. Программа
{ print $1 | "sort" }
выделяет из каждой входной записи первое поле, сортирует эти поля и затем распечатывает их.
Еще один пример использования каналов - следующая общеупотребимая конструкция, гарантирующая, что весь вывод обязательно будет направлен на Ваш терминал:
{ print ... | "cat -v > /dev/tty" }
Во всех операторах вывода, включающих переназначение вывода, файлы или каналы идентифицируются по именам, однако создаются или открываются они только один раз за время выполнения программы.