- •Лабораторна робота 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
- •Варіанти індивідуальних завдань
Приклад 2-3.1
У файлі query3 визначити товар з найбільшою різницею мінімальної й максимальної ціни
Розв'язок надзвичайний простої. Це тривіальний алгоритм пошуку максимуму, цикл перебору рядків організує для нас awk. Максимальна й мінімальна ціни становлять 3-е й 4-е поля рядка відповідно. Для ідентифікації товару слід запам'ятати також і його назва - поле 2. Роздільником полів у файлі query3 є символ "!", так що awk повинна викликатися з опцією -F, що визначає роздільник.
Повний текст програми awk і протокол її виконання виглядає так:
bash2-2.05$ awk -F ! ' /* після закінчення обробки друкуються запомненные дані */ END { printf("%s: %f-%f=%f\n",pp,pmax,pmin,pmax-pmin) } /* при обробці кожного рядка */ { \ /* якщо це перший рядок, запам'ятовується мінімальна й */ /* максимальна ціна й різниця між ними, а також ім'я */ /* якщо рядок не перша, але різниця цін у ній перевищує */ /* запомненную раніше, ціни, різниця, і ім'я теж запам'ятовуються */ if ((NR==1)||($3-$4>pmax-pmin)) \ { pp=$2; pmin=$4; pmax=$3 } \ }' ../metod/query3 DUNK BASKETBALL PROFESSIONAL: 58.300000-40.800000=17.500000 bash2-2.05$ |
|
Приклад 2-3.2
У файлі query2 визначити всіх покупців, у яких кредит вище за середнє
Розв'язок цього завдання вимагає перебрати всі рядки файлу двічі - спочатку для обчислення середньої суми кредиту, а потім для визначення покупців, у яких кредит вище за середнє. Тому при переборі рядків файлу awk у буфері зберігаються необхідні дані (ім'я покупця й кредит) усіх рядків і виконується нагромадження суми кредиту по всіх рядках. Роль буфера відіграють два масиви - один для імен покупців, а іншої - для їхніх кредитів.
При виконанні заключних дій сума кредиту усредняется, а потім перебираються збережені в буфері дані й виводяться ті з них, які відповідають умові.
Повний текст програми awk і протокол її виконання виглядає так:
bash2-2.05$ awk -F : ' /* початкові установки: число рядків -0, сума кредиту - 0 */ BEGIN { nn=0; cc=0 } /* заключні дії */ END { /* усереднення */ cc/=nn; \ /* перебір збережених даних */ /* якщо кредит перевищує середній - печатка */ for (i=0; i<nn; i++) \ if (crd[i]>cc) printf("%s - %d\n",cust[i], crd[i]) \ } \ /* обробка кожного рядка: запам'ятовування імені й кредиту, */ /* нагромадження суми кредиту, підрахунок загального числа рядків */ { cust[nn]=$2; crd[nn]=$8; cc+=$8; nn++ } ' ../metod/query2 TKB SPORT SHOP - 10000 VOLLYRITE - 7000 EVERY MOUNTAIN - 10000 WOMENS SPORTS - 10000 NORTH WOODS HEALTH CENTER - 8000 STADIUM SPORTS - 10000 REBOUND SPORTS - 10000 THE POWER FORWARD - 12000 FAST BREAK - 7000 AT BAT - 8000 AL'S PRO SHOP - 8000 BOB'S FAMILY SPORTS - 8000 WHEELS AND DEALS - 10000 BOB'S SWIM, CYCLE, AND RUN - 7000 bash2-2.05$ |
|