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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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




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

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

5.5.1 Основные сведения о разделении полей

Разделитель полей, который является либо отдельным символом либо регулярным выражением, определяет способ разделения входной записи на поля. awk сканирует входную запись в поисках последовательности символов, соответствующей разделителю полей; сами поля представляют текст между разделителями.

В дальнейших примерах мы используем маркирующий символ "ffl" для представления пробелов в выходе. Если разделитель полей есть `oo', то следующая строка:

moo goo gai pan

разбивается на три поля: `m', `fflg' и `fflgaifflpan'. Отметим ведущие пробелы в значениях второго и третьего полей. Разделитель полей представляется встроенной переменной FS. Системные программисты, обратите внимание! В awk не используется имя IFS, используемое оболочками, совместимыми с POSIX (такими как Bourne shell, sh, или GNU BourneAgain Shell, Bash).

В awk-программе можно менять значение FS оператором присваивания, `=' (см. раздел 7.7 [Присваивающие выражения], стр. 84). Часто это удобно делать в начале выполнения, перед началом обработки ввода, так что самая первая запись будет читаться с правильным разделителем. Чтобы это сделать, используйте специальный образец BEGIN (см. раздел 8.1.5 [Специальные образцы BEGIN и END], стр. 100).

Например, здесь мы присваиваем FS значение цепочки ",":

awk 'BEGIN - FS = "," "" ; - print $2 ""'

Из входной строки

John Q. Smith, 29 Oak St., Walamazoo, MI 42139

эта awk-программа извлечет и  напечатает цепочку 

 `ffl29fflOakfflSt.'.

Иногда входные данные содержат разделительные символы, которые не разделяют поля таким образом, как вы полагаете, что они должны разделять. Например, личное имя в предыдущем примере может иметь добавкой титул или суффикс, такой как `John Q. Smith, LXIX'. Для входной записи с таким именем: John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139 предыдущая программа извлечет `fflLXIX' вместо `ffl29fflOakfflSt.'. Если вы ожидаете, что программа напечатает адрес, вы будете очень удивлены. Мораль такова: выбирайте структуру данных и символы-разделители тщательно, чтобы предотвратить подобные случаи.

Как вы знаете, по умолчанию поля разделяются последовательностями белых пробелов (т.е. (пробелами, знаками tab и newline), но не единичными пробелами: два пробела подряд не ограничивают пустое поле. По умолчанию разделитель полей FS имеет значение цепочки, содержащей один пробел " ". Если бы это значение интерпретировалось обычным путем, т.е. каждый пробел считался разделителем полей, то два пробела подряд содержали бы между собой пустое поле. Этого не происходит, потому что единственный пробел в качестве значения FS представляет специальный случай: он означает разделение полей по умолчанию. Если FS имеет значением какой-нибудь другой отдельный символ, такой как ",", то каждое вхождение этого символа разделяет два поля. Два последовательных вхождения ограничивают пустое поле. Если символ стоит в начале или конце строки, то тоже отделяет пустое поле. Символ пробела есть единственный одиночный символ, который не подчиняется этим правилам.

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



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





Copyright © 2005-2016 Project.Net.Ru