Брайан Керниган - UNIX — универсальная среда программирования

Тут можно читать онлайн Брайан Керниган - UNIX — универсальная среда программирования - бесплатно ознакомительный отрывок. Жанр: comp-osnet, издательство Финансы и статистика, год 1992. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    UNIX — универсальная среда программирования
  • Автор:
  • Жанр:
  • Издательство:
    Финансы и статистика
  • Год:
    1992
  • Город:
    Москва
  • ISBN:
    5-289-00253-4
  • Рейтинг:
    5/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Брайан Керниган - UNIX — универсальная среда программирования краткое содержание

UNIX — универсальная среда программирования - описание и краткое содержание, автор Брайан Керниган, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.

Для программистов-пользователей операционной системы UNIX.

UNIX — универсальная среда программирования - читать онлайн бесплатно ознакомительный отрывок

UNIX — универсальная среда программирования - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Брайан Керниган
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Печатается каждая строка, соответствующая регулярному выражению.

Шаблоны или действия могут отсутствовать. Если отсутствует действие, то по умолчанию печатаются строки, соответствующие шаблону, поэтому команда

$ awk '/регулярное_выражение/' имена_файлов...

эквивалентна предыдущей. Наоборот, если отсутствует шаблон, то действие выполняется для каждой входной строки. Следовательно, команда

$ awk '{print}' имена_файлов...

дает те же результаты, что и команда cat, хотя действует медленнее.

Теперь перейдем к более интересным примерам, но прежде сделаем одно замечание. Как и в случае sed, программу команды awkможно получать из файла:

$ awk -f кмд файл имена_файлов...

Поля. В программе awkкаждая входная строка автоматически разбивается на поля, т.е. последовательности символов без пробелов, разделенные пробелами и символами табуляции. По этому определению выходной поток команды whoимеет пять полей:

$ who

you tty2 sep 29 11:53

jim tty4 sep 29 11:27

$

Поля обозначаются как $1, $2, …, $NF, где NF— переменная, значение которой установлено равным числу полей. В нашем случае NF=5для обеих строк. (Учтите разницу между NF, числом полей и $NF— последним полем строки. В отличие от интерпретатора в программе awkтолько номера полей начинаются с $; переменные не имеют такого префикса.) Например, следующая команда выдаст поле "размер файла" из результата выполнения команды du -а

$ du -a | awk '{print $2}'

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

$ who awk '{print $1, $5}'

you 11:53

jim 11:27 $

Для печати имени и времени входа в систему, упорядоченных по времени, зададим:

$ who awk '{print $5, $1}' | sort

11:27 jim

11:53 you

$

Это альтернативные решения примеров, приведенных выше в данной главе, в которых использовалась команда sed. Хотя с программой awkпроще работать в подобных случаях, она обычно выполняется медленнее как в начальной фазе, так и при большом входном потоке.

Обычно предполагается, что поля разделяются произвольным числом пробелов и символов табуляций, но можно определить в качестве разделителя любой одиночный символ. Один из способов состоит в задании в командной строке флага -F(здесь прописная буква). Например, поля в файле паролей /etc/passwdразделяются двоеточиями:

$ sed 3q /etc/passwd

root:3D.fHR5KoB.3s:0:1:S.User:/:

ken:y.68wdl.ijayz:6:1:K.Thompson:/usr/ken:

dmr:z4u3dJWbg7wCk:7:1:D.M.Ritchie:/usr/dmr:

$

Для печати имен пользователей, образующих первое поле, можно задать:

$ sed 3q /etc/passwd | awk -F : '{print $1}'

root

ken

dmr

Обработка пробелов и символов табуляции здесь особая. По умолчанию и пробелы, и символы табуляции служат разделителями, а разделители в начале строки отбрасываются. Однако если в качестве разделителя определен не пробел, то разделители в начале строки учитываются при определении полей. В частности, если используется символ табуляции, то пробелы не являются символами разделителями, пробелы в начале строки вводят в поле, и каждый символ табуляции определяет поле.

Печать

В программе awk, помимо числа входных полей, доступна и другая интересная информация. Встроенная переменная NRхранит номер текущей входной "записи", т.е. строки. Поэтому для вставки номера строки перед строкой входного потока достаточно задать:

$ awk '{print NR, $0}'

Поле $0обозначает всю входную строку без изменений. В операторе printфрагменты, отделяемые запятой, печатаются через символы разделения полей выходного потока, которые по умолчанию служат пробелами.

Формат печати оператора printобычно является приемлемым. При несоответствующем формате используйте оператор printf, обеспечивающий полный контроль над выходным потоком. Например, для печати номеров строк в поле размером в четыре цифры можно задать такую команду:

$ awk '{printf "%4d %s\n", NR, $0}'

Выражение %4задает десятичное целое число ( NR) в поле размером в четыре цифры, %S— строка символов ( $0), \n— символ перевода строки, который нужен потому, что оператор printfне выдает автоматически пробелы или символы перевода строк. Оператор printfсходен с аналогичной Си функцией (см. справочное руководство по printf(3)).

Мы могли бы определить программу ind(рассматривавшуюся в начале главы) следующим образом:

$ awk '{printf "\t%s\n", $0}' $*

Здесь выдается символ табуляции ( \t) и входная строка.

Шаблоны

Предположим, что вы хотите найти в файле /etc/passwdпользователей, не имеющих пароля. Зашифрованный пароль находится во втором поле, поэтому программа состоит из одного шаблона:

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

Шаблон проверяет, является ли второе поле пустой строкой (операция ==— это проверка на равенство).

Такой шаблон можно задать различными способами:

$2=="" Второе поле пусто

$2~/^$/ Второе поле соответствует пустой строке

$2!~/./ Второе поле не содержит ни одного символа

length($2) == 0Длина второго поля равна нулю

Символ ~обозначает соответствие регулярному выражению, а символ !— отсутствие соответствия. Само регулярное выражение заключено в символы дробной черты.

Встроенная функция lengthпрограммы awk вычисляет длину строки символов. Шаблону может предшествовать символ ! для отрицания его, например,

!($2=="")

Операция !подобна такой же операции в языке Си, но в редакторе sedэта операция следует за шаблоном.

Наиболее типичное использование шаблонов в программе awkсводится к задачам простой проверки данных. Большинство из них немногим сложнее, чем поиск строк, не удовлетворяющих какому-то критерию; если нет выходного потока, то считается, что данные удовлетворяют соответствующему критерию (по принципу "отсутствие новостей — хорошая новость"). Например, в следующем шаблоне проверяется с помощью операции %, вычисляющей остаток от деления, четно или не четно число полей в каждой входной строке:

$ NF % 2 != 0 # напечатать, если нечетное число полей

Другой шаблон выдает исключительно длинные строки, используя встроенную функцию length:

length ($0) >72 # напечатать, если слишком длинная строка

В программе awkиспользуется то же соглашение о комментарии, что и в интерпретаторе: символ #отмечает начало комментария.

Можно сделать выходной поток более информативным, снабдив его предупреждающим сообщением и частью слишком длинной строки, используя для этого встроенную функцию substr:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Брайан Керниган читать все книги автора по порядку

Брайан Керниган - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




UNIX — универсальная среда программирования отзывы


Отзывы читателей о книге UNIX — универсальная среда программирования, автор: Брайан Керниган. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x