Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
27.03.2016
Размер:
341.5 Кб
Скачать

10.3 Переадресація вводу та виводу

Як відомо, вирішення задачі за допомогою комп’ютера може бути зведено до трьох функцій: ввод, обробка, вивід.

OS Unix розглядає клавіатуру як стандартний пристрій вводу (standart input), а екран як стандартний пристрій виводу (standart output). OS Unix припускає, що команда date вводиться з клавіатури і, що інформація, яка запитується по цій команді повинна відображатися на екрані. Але для більшості команд OS Unix завжди можливо переадресувати ввод та вивід. Наприклад, можливо зробити так, щоб команда отримувала дані з файла, а не з клавіатури або посилала результати на інший термінал. Для позначенняпереадресації вводу або виводу з командного рядка використовують знаки “<”,”>”.

Наприклад, розглянемо команду mail. Вона приймає деякий текст користувача та передає його усм користувачам, імена яких користувач вказує у командому рядку. Приклад1:

$ mail mary john sandy paul

Якщо ввести листа за допомогою ed і потім зберегти його у файлі з ім’ям letter_5, а потім зберегти його у файлі з користувачам з переадресацією вводу:

$mail mary john sandy paul <letter_5

Приклад 2:

Переадресувати вивід можливо з використанням команди ls:

$ls>files

Ця команда означає, що дані про файл будуть введені у файл files і якщо такого файла не існує, інтерпретатор shell його створить.

Переадресацію виводу часто використовують при об’єднанні деяких файлів за допомогою команди cat.

Наприклад:

$cat file_1file_2file_3>combine

За цією командою об’єднують три файли і результуючий текст зберігається у combine.

Для того, щоб об’єднати ці три файли та добавити результат до файлу combine не заміняючи його змісту треба виконати:

$cat file_4 file_5 file_6>>combine

Якщо файл не існує викличе створення нового, при цьому символ >> приєднає новий текст до його кінця, але не заміняє його повністю.

11. Конвeйори

Крім переадресації існує інший спосіб змінення стандартного вводу та виводу – це встановлення зв’язку двох процесів через програмний канал (pipe), або конвейор (pipeline), при якому вихід одного процесу стає входом для другого. Символ для позначення програмного канала є|.

Якщо потрібно використати вихід одного процесу як вхід для другого, потрібно пройти через обхідну процедуру.

Наприклад, якщо є три невеликих текстових файла part_d, part_e та part_f і потрібно їх зберігати в OS роздільно, але при виводі на друк потрібно виводити їх на одну сторінку потрібно виконати наступне:

$cat part_d part_e part_f>temp_file

$lpr temp_file (lpr-line print

$rm temp_file – видалити тимчасовий файл.

За допомогою конвейєра та команд cat та lpr це можливо виконати наступним чином:

$cat part_d part_e part_f | lpr

Команда дозволяє направляти вихід від команди cat до команди lpr у якості її входу.

Розглянемо як можливо використати конвеєри лоя роботи з командами ls та pr (print) (pr має опцію – 4, яка виводить текст у чотири колонки):

$ls|pr-t-l2-4

.excr c_programs grid z1051

.profile c_progs link.mod z1052

$_

За цією командою інформація виводиться у чотири колонки –4, кількість рядків два –12, -t забороняє вивід зайвої інформації.

Щоб роздрукувати сисок файлів на принтер у три колонки, а також вивести їх на екран можливо створити складний конвейєр:

$ls|pr-3|lpr

Число можливих комбінацій необмежене.

Приклади:

$who|sort – перегляд списку у алфавітному порядку;

$who|wc – підрахунок кількості поточних користувачів;

$ls|wc – підрахунок кілбкості файлів у своєму каталозі.

Використовуючи концепцію переадресації виводу, за допомогою команди cat можна виконати ввод простого тексту. Для цього потрібно ввести текст Ctrl-D

$cat>.enter

<текст програми>

<який вводиться у файл>

$_

Після цього файл можна вивести на екран:

$cat.enter

Kоманду cat можливо використати для перехвату тексту і зберігання його у особистому дисковому файлі, який знаходиться поза системою Unix (вивантаження даних downloading data).

Команда more також дозволяє виводити текст файлу на екран, але не переміщує його безпереривно по екрану, а виконує паузи після видачі кожного повного екрану.

Після цього у нижньому рядку екрана вона надає повідомлення:

_--More---(6%)

Після цього користувач має декілька альтернатив:

  • для отримання наступного рядка – Enter;

  • для виводу наступної сторінки – пропуск (прогалина);

  • для пошуку у файлі деякого тексту ->/text;

  • для виходу Q.

Двійка команд head (заголовок) та tail (хвіст) дозволяють виводити тільки початковий або кінцевий сегменти файлу. За звичаєм будуть виводитись десять рядків, але можливо задавати і іншу кількість.

Команда tail має деякі опції:

с – вивід частини файлу у символах;

l – рядка;

b – блока (512 символів).

Приклад: вивести на екран останні 17 символів файлу .enter:

$tail – 17 c.enter

<текст файлу>

$_

Якщо у файлах маються довгі рядки та виводяться вони за допомогою cat, тоді слова будуть розташовані тільки у лівій частині екрану. Щоб бачити однозначно велику кількість елементів списка використовують команду sp (spase). Для цього потрібно команді sp передати текст по конвейєру, після чого текст розвернеться на екран.

Приклад: без sp команди:

$cat.enter

< >

<текст>

< >

$_

$cat.enter|sp

<8позицій><текст><8 позицій><8 позицій>

$_

При цьому sp розташовує текст у колонки по 8 позицій, як при табуляції. При виводі файлів sp має наступний вигляд:

$ls|sp

<> <>

У більшості систем Unix можливо встановити спільний тип файлу, що швидко дає змогу отримати дані про нього.

$file.enter $file ch.set_set

.enter.English text ch.set_6:ascii text

$_ $_

$ file FOCUS

FOCUS: command text

$_

При обробці файлів типу БД для сортування інформації використовують команду sort.

Приклад: хай є два файли fruits та animals.

$cat>fruits $cat>animals

bananas horses

oranges cats

apples dogs

cherries birds

pears lizards

$_ $_

Після

$ sort fruits|sp

apples bananas cherries oranges pears

$_

$ sort animals|sp

birds cats dog horses lizards

Приклад сортування списка користувачів:

$who|sort

dave tty11 Feb 2 15:56

elaine tty04 Feb 3 09:58

manny tty07 Feb 3 08:05

$_

У випадках, коли у файлах зустічаються слова, які повторюются використовують команду uniq(unique). Припустимо, що потрібно зберегти список різних елементів системи (файлу).

Наприклад:

$ sort animals

birds

birds

birds

cats

cats

cats

dogs

dogs

horses

lizards

racoons

$_

$ sort animals|uniq

birds

cats

dogs

horses

lizards

racoons

$_

Ця команда має декілька опцій:

С – вказує у результуючому списку перед кожним елементом кількість з’явлень у попередньому списку:

$ sort animals|uniq-c

3 birds

3 cats

2 dogs

1 horses

1 lizards

1 racoons

$_

В багатьох випадках, при обробці великих речень потрібно обробити окремі слова у попередньому рядку, для цього використовують команду prep (prepare). При наявності в системі.

$cat>words

<текст> Ctrl-D

$prep words

<це>

<мій>

<файл>

$_

При цьому слова будуть виводитись без розділюючих знаків та виводитись строковими літерами. Сортування цього списку можливопровести також за допомогою команди uniq, щоб визначити, скільки разів слово зустрічається у файлі. Для цього спочатку треба розмістити кожне слово в окремий рядок за допомогою команди prep; після упорядковують список командою sort; після – отримують частотність з’явлення слів за допомогою команди uniq з опцією – с (count).

$prep words |sort| uniq – c

1 мій

1 файл

1 це

$

Іноді потрібно мати деякі статичні дані про файли. Наприклад, порібно визначити кількість рядків або кількість слів. Такі відомості про кількість рядків, слів та символів у файлі дає команда wc (word count).

Пердбачається, що слова відокремлюються одне від іншого аьо розділюючими знаками, або пропусками, або позначками табуляції або розташрвані в різних рядках.

Приклад:

$ wc enter

3 15 69 enter

$_

якщо потрібно взнати що небудь з цих трьох параметрів (кількість рядків, кількість слів, кількість символів), можливо використовувати наступні опції команди wc:

-1-> тільки рядки;

-w-> тільки слова;

-с-> тільки символи.

Наприклад:

$wc-1 enter

  1. enter – три рядки

$ wc – w enter

15 enter – 15 слів

$ wc – c enter

69 - 69 символів.

Для пошуку у файлі деякого ключового слова або фрази використовують команду grep. Люба послідовність символів, які відшукують називають “моделью пошуку” або “регулярним виразом” (globally find regularexpressions and print). Наприклад:

$ grep cat enter

with the cat command

$_

$ who | grep tty 15

manny tty Feb 3 10:05

$_

За цією командою визначається, хто ввійшов в систему з терміналу.

Якщо робити пошук у БД – службовці, яка має дані про адресу, телефон та інше на деякого службовця, то це робиться так:

$ grep Ivanov phone.list | grep `Kirovograd Ukr`

Ivanov Sergei 316017 Popova 100/41, Kirovograd Ukr (524-55-48-37)

$_

Ця команда демонструє передачу результата по програмному каналу між двома однаковими командами. `Kirovograd Ukr` виділено у кавички тому, що це 2-а окремих слова.

Для пошуку помилок у словах використовують команду spell (писати слова по літерах). Перевіряє правопис слів у файлі, шляхом їх порівняння з образцями, записаними у великому безпосередньо доступному машиному словарі. При цьому можливо перевіряти і правильність похідних слів, які знаходяться в цьому словарі.

Програма spell може перевірити тільки правопис слова, але не може вказати, чи правильно воно використовується.

$ spell lines

<слова з помилками>

< >

$_

Щоб віднайти різницю між двома модифікованими файлами застосовують команду diff (differ). Виготуємо для приклада два файли:

$cat>wildfile.1

1 antelope

2 bear

3 coyot

4deer (олень)

5 elk (лось)

$_

$ cat > wildlife.2

1 antelope

2 buffalo

3 coyote

4 elk

5 fox

$_

$ diff wildlife.1 wildlife.2

2c2 [строка 2 змінена]

<2 bear .-Перший файл (<) має 2 bear.

---

>2 buffalo .-Другий файл (>) має 2 buffalo

4,5c4,5 [строки 4 і 5 змінені]

<4 deer .-Строка 4 першого файла – 4deer.

<5 elk .-Строка 5 першого файла –5 elk.

---

>4 elk .-Строка 4 другого файла –4 elk.

>5 fox .-Строка 5 другого файла – 5 fox.

$_

Cимвол с вказує на різницю, виключення – символ d додаток до тексту а, разом зі знаком < для визначення рядка в першому файлі та знаком >для вказівки в другому файлі. --- якщо співпадає.

diff має декілька опцій:

(-b) – ігнорування пропусків у обох файлах;

(-е) – вивід списка команд редактора ed для перетворення першого файла у другий.

Для отримання іншого типу даних про різницю між двома файлами, виконують команду comm (common). Ця команда виводить на екран три колонки:

$comm wildlife.1 wildlife.2

1 antelope [загальне для обох файлів]

2 bear [тільки для першого файла]

2 buffalo [тільки для другого файла]

3 coyote [загальне для обох файлів]

4 deer [тільки для першого файла]

4 elk [тільки для другого файла]

5 elk [тільки для першого файла]

5 fox [тільки для другого файла]

$_

Треба звернути увагу, що крманда comm пише спочатку рядок elk є тільки у файлі wildfile.1, а потім = що тільки у файлі wildlife.2.

Команда comm дозволяє подавити вивід одної або декількох колонок. Для цього використовують опції:

(-1) – водавлення першої колонки;

(-2) – подавлення другої колонки;

(-3) – подавлення третьої колонки. Можливо використовувати (-13).

$comm – 12 wildlife.1 wildlife.2

1 antelope [спільне для обох файлів]

3 coyote [спільне для обох файлів]

$_

Зверніть увагу, що відсутній рядок elk.

Cmp (compare-)

$cat>five.steps

1.Turn on the machine.

2. Stort the program.

3. Request the P option.

4. End the program.

5. Turn off the machine C-D.

$_

Щоб виконати перекодування, треба виконати наступну команду:

$ tr 12345 abcde < file.steps

тоді буде виконуватися

а. Turn on the machine.

b. Stort the program.

c. Request the Poption.

d. End the program.

Соседние файлы в папке Додаткова інформація