Учебники

AWK — перенаправление вывода

Пока что мы выводим данные на стандартный поток вывода. Мы также можем перенаправить данные в файл. Перенаправление появляется после оператора 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 закрывает команду.