П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6757 раз(а).

Учебник HTML.
Просмотров 3717 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3702 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8335 раз(а).

Внешние атаки...
Просмотров 4563 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство пользователя для GNU Awk

6. Печатный вывод

6.6 Перенаправление вывода от print и printf

До сих пор мы имели дело с выходом от печати только на стандартное устройство, обычно на терминал. И print и printf могут также посылать результаты своей работы в другие места. Это называется перенаправлением.

Перенаправление ставится после операторов print или printf. Перенаправление в awk записывается точно так же как и в командах оболочки, только они пишутся внутри awk-программы.

Имеются три формы перенаправления: в файл, в конец файла, и в вывод по конвейеру в другую команду. Мы покажем их для оператора print, но они точно такие же и для printf.

print items ? output-file

Этот тип перенаправления печатает в файле с именем output-file, заданном любым выражением. Его значение преобразуется в цепочку и затем используется как имя файла (см. Главу 7 [Выражения], стр. 77).

Когда используется такой тип перенаправления, выходной файл очищается перед выводом в него. Во втором случае результаты дописываются в конец указанного файла без его предварительной очистки. Если файла не было, он создается.

Вот пример того, как awk-программа напишет список имен BBS в файл `name-list' и список телефонных номеров в файл `phone-list'. Каждый выходной файл содержит по одному имени или номеру в каждой строке.

$ awk '- print $2 ? "phone-list" ? 
print $1 ? "name-list" ""' BBS-list
 $ cat phone-list
a 555-5553 
a 555-3412...
$ cat name-list
a aardvark 
a alpo-net...
print items ?? output-file

Этот тип перенаправления выдает результаты в существующий выходной файл с именем output-file. Разница между этим и перенаправлением с одним только `?' состоит в том, что прежнее содержимое ( если оно было) выходного файла не стирается. Вместо этого выход от awk приписывается в конец файла. Если файла не было, он создается вновь.

Команда print items

Можно также посылать результаты печати вместо файла в другую программу через конвейер. Этот тип перенаправления открывает конвейер для команды и передает значения аргументов по этому конвейеру другому процессу, созданному для выполнения команды. Команда перенаправления аргумента фактически является выражением awk. Его значение преобразуется в цепочку, содержание которой служит командой оболочки, подлежащей исполнению. Например, следущее производит два файла, один --- несортированный список имен BBS и другой --- список, отсортированный в обратном алфавитном порядке:

awk '- print $1 ? "names.unsorted"
command = "sort -r ? names.sorted" 
print $1 -- command ""' BBS-list

Здесь не отсортированный список пишется с обычным перенаправлением, а отсортированный записывается по конвейеру через утилиту сортировки. Следующий пример использует перенаправление для отправки сообщения в почтовый список `bug-system'. Это может быть полезным поддержки системы, если ошибки часто обнаруживаются при исполнении сценария awk.

report = "mail bug-system" 
print "Awk script failed:", 
$0 -- report m =
("at record number " FNR " of " FILENAME) 
print m -- report close(report)

Сообщение строится с использованием конкатенации строк и сохраняется в переменной m. Затем оно посылается через конвейер в почтовую программу. Мы вызываем функцию close, потому что полезно закрывать конвейер как только весь вывод поступил в него. См. раздел 6.8 [Закрытие входных и выходных файлов и конвейеров], стр. 74, для подробного ознакомления. Этот пример также иллюстрирует использование переменных для представления файлов или команд: необязательно использовать всегда строковые константы. Использование переменных является полезной идеей, так как awk требует, чтобы всегда строковые значения одинаково записывались.

Перенаправление вывода с использованием `?', `??' или `--' просит систему открывать файл или конвейер только если соответствующий файл или команда, указанные вами, еще не использовались вашей программой или были закрыты после последнего обращения к ним.

Как ранее уже говорилось (см. раздел 5.8.8 [Обзор вариантов getline], стр. 59), многие реализации awk ограничивают число конвейеров, которые может открыть awk-программа, только одним! В gawk такого ограничения нет. Вы можете открыть их столько, сколько позволяет используемая операционная система.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru