- •Лабораторна робота 3
- •Базові регулярні вираження
- •Метасимволы, використовувані в регулярних вираженнях
- •Приклади регулярних виражень
- •Приклад виконання лабораторної роботи n3 Завдання 1
- •Завдання 2
- •Завдання 3
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Вибрані команди Unix. Короткий опис:
- •Приклад виконання лабораторної роботи n4 Завдання 1
- •Завдання 1, варіант 1
- •Завдання 1, варіант 2
- •Завдання 1, варіант 3
- •Завдання 2
- •Завдання 2 варіант 1
- •Завдання 2, варіант 2
- •Завдання 2, варіант 3
- •Завдання 3
- •Завдання 3 варіант 1
- •Завдання 3 варіант 2
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Команда awk :
- •Опис шаблонів
- •Приклад виконання лабораторної роботи n5 Приклад 1-1
- •Приклад 1-2
- •Приклад 1-3
- •Приклад 2-3.1
- •Приклад 2-3.2
- •Приклад 2-3.3
- •Приклад 2-3.4
- •Варіанти індивідуальних завдань
- •Команда sh:
- •Команда env:
- •Приклад виконання лабораторної роботи n6
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Деякі приклади програмування
- •Приклад 2
- •Приклад 3
- •Варіанти індивідуальних завдань
Приклад 1-3
У передостанньому рядку, який закінчується крапкою, поміняти місцями перше слово з останнім.
Розв'язок цього завдання більш складне. Складність полягає в тому, що ми не знаємо, який рядок повинна бути модифікована, поки не прочитаємо весь файл. Розв'язок полягає в тому, що поточна обробка файлу буде в основному полягати в збереженні рядків у буфері. Буфер повинен являти собою масив рядків, який буде містити всі рядки файлу. Разом з нагромадженням рядків у буфері ми визначаємо, чи є останній символ рядка крапкою, і запам'ятовуємо номера двох останніх рядків із крапкою. Після закінчення читання файлу буфер містить повний текст файлу, і ми знаємо номери останньої й передостанньої рядків із крапкою.
У заключній обробці ( по шаблонові END) ми перебираємо рядка, збережені в буфері. Якщо номер чергового рядка не збігається з номером передостаннього рядка із крапкою, друкуємо цей рядок без змін. Якщо ж це той самий рядок, то при печатці вона модифікується. Ми використовуємо функцію awk split(), яка розбиває рядок на поля, розділені заданим символом. Частини рядка містяться в заданий масив, а функція повертає число полів, яке вона виявила в рядку. У нашому випадку роздільником є пробіл, а полями - слова. На печатку виводиться спочатку останній елемент масиву - результату функції split(), потім усі елементи із другого по передостанній, і нарешті - перший елемент. Таким чином, у рядку, що друкується, перше й останнє слова міняються місцями.
Повний текст програми awk і протокол її виконання виглядає так:
bash2-2.05$ awk ' /* nlines - лічильник рядків у файлі, */ /* point1 і point2 - номера рядків, що закінчуються крапкою, - */ /* останньої й передостанньої відповідно */ BEGIN { nlines=0; point1=0; point2=0; } /* основна обробка - після закінчення читання файлу */ END { \ /* перебираються всі рядки, збережені в буфері */ for (i=1; i<=nlines; i++) { \ /* перевірка - чи збігається номер рядка з виявленим номером */ if (i==point2) { \ /* якщо збігається - рядок розбивається на слова, слова */ /* містяться в масив bb; nw - число виділених слів */ nw= split(buf[i],bb," "); \ /* друкується останнє слово */ printf("%s ",bb[nw]); \ /* друкуються слова від другого до передостаннього */ for (j=2; j<=nw; j++) printf("%s ",bb[j]); \ /* друкується перше слово */ printf("%s\n",bb[1]); \ } \ else \ /* якщо номер не збігається, рядок друкується як є */ print buf[i]; \ } \ } \ /* обробка кожного прочитаного рядка */ { \ /* прочитані рядки накопичуються в буфері */ buf[++nlines]=$0; \ /* виділяється останній символ рядка */ k=substr($0,length($0),1); \ /* якщо це крапка, модифікуються номери останньої й */ /* передостанньої рядків із крапкою */ if (k==".") { point2=point1; point1=NR; } \ }' Hum-Dum.txt Humpty-Dumpty Set on the wall. Humpty-Dumpty Had a greate fall. And all the king's horses, man. all the king's man. And And all the king's man. Can not Humpty, Can not Dumpty, Humpty-Dumpty, Dumpty-Humpty, Set on this wall Again. bash2-2.05$ Script done on Thu Sep 5 08:44:36 2002 |
|