П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

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

MySQL

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

Хостинг

Другое







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

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

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

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

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

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

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

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

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

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

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

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



 
 



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

5. Чтение входных файлов

5.5 Задание разделителей полей

5.5.4 Установка FS из командной строки

FS может быть установлена из командной строки. Для этого нужно использовать параметр `-F'.

 Например,

awk -F, 'program' input-files

устанавливает в FS символ `,'. Заметьте, что параметром служит заглавное `F'. В отличие от этого `-f' указывает, что файл содержит программу awk. Регистр имеет значение в параметрах командной строки: параметры `-F' и `-f' не имеют ничего общего. Их можно использовать одновременно для установки переменной FS и получения awk-программы из файла.

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

Например, чтобы
использовать  `"' как разделитель полей, нужно напечатать:

# что-нибудь такое как FS = """" awk -F"""" '...' files ...

Поскольку `"' используется в оболочке как кавычка, awk увидит `-F""'. Тогда awk обработает `""' как управляющую последовательность (см. раздел 4.2 [Управляющие последовательности], стр. 24), и получит в результате одну `"' в качестве разделителя полей.

В специальном случае, в режиме эмуляции (см. раздел 14.1 [Параметры командной строки], стр. 161), если аргумент при `-F' есть `t', то FS получит значение символа tab. Это произойдет потому, что при печати `-F"t' в оболочке, без всяких кавычек, `"' удаляется, так что awk предположит, что на самом деле вы хотите разделять поля символами tab, а не `t'. Употребляйте `-v FS="t"' в командной строке, если вы на самом деле хотите отделять поля буквой `t' (см. раздел 14.1 [Параметры командной строки], стр. 161).

Например, воспользуемся программным файлом awk с именем `baud.awk', который содержит образец /300/ и действие `print $1'. Вот эта программа:

/300/ - print $1 ""

Установим также в FS символ `-' и исполним программу для входного файла `BBS-list'. Следующая команда напечатает список имен досок объявлений, которые работают со скоростью 300 бод, и первые три цифры их телефонных номеров:

$ awk -F- -f baud.awk BBS-list
a aardvark 555
a alpo
a barfly 555...

Обратите внимание на вторую строку вывода. В оригинальном входном файле (см. раздел 1.3 [Файлы с данными для примеров], стр. 7), вторая строка выглядит так:

alpo-net 555-3412 2400/1200/300 A

Символ `-', часть системного имени, использован как разделитель полей вместо `-' в телефонном номере, как было задумано. Это показывает, почему надо быть осторожным в выборе полей и разделителей записей. На многих системах Unix каждый пользователь имеет отдельный вход в системном файле с паролями, одну строку на пользователя. Информация в строке разделена на части двоеточиями. Первое поле содержит регистрационное имя пользователя, второе есть его секретный пароль.

Строка этого файла может выглядеть подобно следующей:

arnold:xyzzy:2076:10:Arnold Robbins:/home/arnold:/bin/sh

Следующая программа просматривает системный файл с паролями и печатает входы пользователей, не имеющих пароля:

awk -F: '$2 == ""' /etc/passwd

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



 





Copyright © 2005-2011 Project.Net.Ru