Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции_ОСС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
476.16 Кб
Скачать

Тема 18. Конвееры и фильтры

Операционная система UNIX обеспечивает обмен информацией (управляющей и прикладной) между процессами. Обмен данными между процессами осуществляется через программный канал. По сути, это некоторый системный файл, в который одна команда пишет информацию, а другая - читает. Если команды считывают информацию со стандартного буферного системного файла ввода (stdin) и направляют в стандартный буферный файл вывода (stdout), то такие команды могут быть объединены в единую командную строку – конвеер. Конвеер позволяет использовать вывод одной команды в качестве ввода другой. Конвеер по сути это программный канал для создания потока данных от команды к команде.

Программный канал создается автоматически интерпретатором

shell при обнаружении в командной строке команды, связываемые специальным символом“|” (вертикальная черта):

команда_1 | команда_2 | команда_3 | ... | команда_n

Конвейер представляет собой технологическую цепочку обработки исходной информации.

Пример.

$ ls > buffile

$ wc -l < buffile

20

$ rm buffile <NewLine>

$

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

$ ls | wc -l <NewLine>

$

Если команда в конвеере не меняет или сокращает передаваемую информацию, то такие команды называются командами – фильтрами.

Пример.

$ ls -l| grep ‘mar’|wc -l <NewLine>

  • вывод на экран числа строк текущего каталога, содержащих подстроку "mar" (подсчитывается число файлов, модифицированных в марте).

Пример.

$who>fil

$sort<fil или:

$who|sort

$

Конвеер удобно использовать для просмотра вывода команды когда информация занимает больше одного экран:

$cat filmax|more

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

tee [-ключи] файл -дублирование стандартного вывода(экран)

в указанный файл

Ключи:

-i - игнорирование прерываний, что обеспечивает непрерывность

вывода;

-a - содержимое ввода добавляется к существующему файлу в его

конец (накопление данных).

Пример.

$ ls -l | tee -a fil.res

Конвейер обеспечивает вывод содержимого каталога на экран

и добавляет эти данные к содержимому fil.res

Пример.

$ ls -l | tee fil | wc -l

20

$сat fil - содержимое файла можно просмотреть на экране.

Полный листинг каталога выводится в файл fil, а число

строк в каталоге - на экран (на стандартный вывод). Однако вывода

каталога на экран в данном случае не будет, т.к. выходной поток

команды ls после команды tee перенаправляется опять в конвеер

(для команды wc).

Пример.

$find . -type d|tee fil|wc -l - подсчет числа подкаталогов в текущем каталоге и вывод их полных маршрутных имен в файл fil.

Рассмотренные возможности использования программных кана-

лов сильно расширяют возможности командного языка операционной системы. Устойчивые языковые конструкции, введенные для специальных целей, являются, по существу, новыми командами.

Еще одна команда – фильтр разделяет и объединяет по составляющим элементам строки символов во входном потоке данных с выводом результата на экран:

$cut -k [имя_входного_файла]

  • если имя входного файла не указано,то входной поток поступает со стандартного устройства ввода (клавиатура) или из программного канала.

Некоторые ключи:

-f<список_номеров_полей_в_строке_файла> - в выходной поток передаются только указанные поля, разделенные символьными разделителями;

-d<вид_разделителя_полей_в_строке_файла> примеры разделителей: ‘;’ или ‘:’ или ‘ ’ , по умолчанию – табуляция.

Эти два ключа применяются совместно.

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

-b<число_байтов_или_выражение_для_подсчета числа> побайтовое вырезание полей из строк входного потока и направление их в выходной поток;

-c<число_символов_или_выражение> - посимвольное вырезание полей из строк входного потока и направление их в выходной поток.

Несколько не связанных между собой примеров использования команды:

$сut -f1 -d’:’ /etc/passwd -формируется и выводится на экран список зарегистрированных пользователей

$who|cut -f1 -d’ ’|tee filuser -то же и дополнительный вывод в файл

$cat /etc/passwd|cut -d’:’ -f1

$ls -l|cut -b-15 -вырезаются байты с первого по 15

$ls -l|cut -с11-25 - диапазон номеров символов в строке

$ls -l|cut -с25- |cat >>fil - вырезаются байты от 25 до конца строки

Значение числа элементов может быть вычислено, например:

-c$a - значение задается переменной или

-с`expr ………..` -может быть использовано арифметическое или логическое выражение (см. ниже) и т.п..

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]