Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы (2 семестр).docx
Скачиваний:
3
Добавлен:
12.11.2019
Размер:
193.38 Кб
Скачать

Приклад виконання лабораторної роботи n5 Приклад 1-1

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

Розв'язок виявляється найпростішим. У якості символу-роздільника в тексті використовується пробіл, отже, при виклику awk визначати роздільник явно не потрібно. Слова становлять поля. Ніяких спеціальних дій на початку або наприкінці обробки вживати не потрібно. При обробці кожного рядка слід спочатку вивести повний текст рядка ($0), а потім перевірити довжину другого поля рядка ($2). Якщо довжина цього поля - 0, то друге слово в рядку відсутнє, і нічого вживати не потрібно. Якщо довжина відмінна від 0, друге поле виводиться в наступний рядок.

Повний текст програми awk і протокол її виконання виглядає так:

bash2-2.05$ awk '

{ \

/* вивід усього рядка */

print $0; \

/* перевірка 2-го слова и вывод его, если оно есть */ 

if (length($2)>0) print $2; \

}' Hum-Dum.txt

Humpty-Dumpty

Set on the wall.

on

Humpty-Dumpty

Had a greate fall.

a

And all the king's horses,

all

And all the king's man.

all

Can not Humpty,

not

Can not Dumpty,

not

Humpty-Dumpty,

Dumpty-Humpty,

Set on this wall

on

Again.

bash2-2.05$

Приклад 1-2

Перший символ кожного рядка замінити на перший символ наступного рядка. Останній рядок залишається без змін.

Розв'язок цього завдання складніше, але не набагато. Ми можемо виводити рядок тільки після того, як прочитаємо наступний рядок. Тому вводимо змінну buf, яка відіграє роль буфера для запам'ятовування попереднього рядка. При обробці першого рядка (номер рядка можна визначити по системній змінної NR) її повний уміст тільки запам'ятовується в буфері. При обробці будь-якого наступного рядка на печатку виводиться перший символ прочитаного рядка й текст рядка, запомненной у буфері (попереднього рядка) без першого символу. Після закінчення читання файлу в буфері залишається текст останнього рядка, який повинен бути також виведений. Для виділення першого символу рядка й залишку рядка без першого символу використовується функція substr().

Повний текст цієї програми awk і протокол її виконання виглядає так:

bash2-2.05$ awk '

/* після обробки останнього рядка виводиться останній буфер */ 

END { printf("%s\n",buf); }

{ \

/* при обробці першого рядка ця дія не виконується */ 

if (NR>1) { \

/* виводиться 1-й символ поточного рядка */

/* і вміст буфера, починаючи з 2-го символу */

printf("%c%s\n",substr($0,1,1),substr(buf,2)); \

} \

/* поточний рядок запам'ятовується в буфері */

buf=$0; \

}' Hum-Dum.txt

Sumpty-Dumpty

Het on the wall.

Humpty-Dumpty

Aad a greate fall.

And all the king's horses,

Cnd all the king's man.

Can not Humpty,

Han not Dumpty,

Dumpty-Dumpty,

Sumpty-Humpty,

Aet on this wall

Again.

bash2-2.05$

Script done on Thu Sep 5 08:42:09 2002