Пока что мы выводим данные на стандартный поток вывода. Мы также можем перенаправить данные в файл. Перенаправление появляется после оператора print или printf . Перенаправления в AWK записываются так же, как перенаправление в командах оболочки, за исключением того, что они записываются в программе AWK. В этой главе объясняется перенаправление с подходящими примерами.
Оператор перенаправления
Синтаксис оператора перенаправления —
Синтаксис
print DATA > output-file
Он записывает данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, выходной файл стирается до того, как в него будет записан первый вывод. Последующие операции записи в тот же выходной файл не стирают выходной файл, а добавляют к нему. Например, следующий пример пишет Hello, World !!! в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data
Теперь давайте перенаправим некоторое содержимое в него с помощью оператора перенаправления AWK.
пример
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Hello, World !!!
Добавить оператора
Синтаксис оператора добавления выглядит следующим образом:
Синтаксис
print DATA >> output-file
Он добавляет данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, новое содержимое добавляется в конец файла. Например, следующий пример добавляет Hello, World !!! в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data
Теперь давайте добавим к нему некоторое содержимое, используя оператор дополнения AWK.
пример
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data Hello, World !!!
труба
Можно отправить вывод в другую программу через канал вместо использования файла. Это перенаправление открывает канал для команды и записывает значения элементов через этот канал в другой процесс для выполнения команды. Команда аргумента перенаправления на самом деле является выражением AWK. Вот синтаксис трубы —
Синтаксис
print items | command
Давайте использовать команду tr для преобразования строчных букв в прописные.
пример
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Выполнив этот код, вы получите следующий результат —
Выход
HELLO, WORLD !!!
Двухстороннее общение
AWK может общаться с внешним процессом с помощью | & , который является двусторонней связью. Например, в следующем примере команда tr используется для преобразования строчных букв в прописные. Наш файл command.awk содержит —
пример
BEGIN { cmd = "tr [a-z] [A-Z]" print "hello, world !!!" |& cmd close(cmd, "to") cmd |& getline out print out; close(cmd); }
Выполнив этот код, вы получите следующий результат —
Выход
HELLO, WORLD !!!
Сценарий выглядит загадочно? Позвольте нам демистифицировать это.
Первое утверждение, cmd = «tr [az] [AZ]» , является командой, с которой мы устанавливаем двустороннюю связь из AWK.
Следующий оператор, т. Е. Команда print, обеспечивает ввод команды tr . Здесь & | указывает на двустороннюю связь.
Третье утверждение, то есть close (cmd, «to») , закрывает процесс после завершения его выполнения.
Следующий оператор cmd | & getline out сохраняет вывод в переменную out с помощью функции getline.
Следующая инструкция print печатает вывод, и, наконец, функция close закрывает команду.