- •Лабораторна робота 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, варіант 2
Визначити покупців, які нічого не купували в лютому 1990 р.
Розв'язок:
cut -f1,2 -d':' ../metod/query2 | |
Проекція по коду й імені покупця. |
sort +0 -1 -t':' >temp01 |
Сортування по коду, збереження. |
sed 's/ \{1,\}/\:/g' ../metod/query4 | |
Установка роздільника ':'. |
cut -f3,4 -d':' | |
Виділення коду покупця й дати. |
sed -n '/-FEB-91/p' | |
Обмеження по даті. |
sort +0 -1 -t':' -u | |
Сортування по коду покупця, ліквідація дублікатів кодів. |
join -j1 1 -j2 1 -t':' -a2 - temp01 | |
З'єднання по коду покупця (праве зовнішнє). |
sed -n '/[:]*:[:]*$/'p | |
Вибірка тих рядків, у яких тільки один раз зустрічається роздільник полів, тобто, немає дати. |
cut -f2 -d':' | |
Проекція по імені покупця. |
sort +0 -1 >result |
Сортування по імені. |
rm -f temp* |
Видалення тимчасових файлів. |
Протокол виконання:
Script started on Thu Sep 5 08:16:50 2002 bash2-2.05$ cut -f1,2 -d':' ../metod/query2 | > sort +0 -1 -t':' >temp01 bash2-2.05$ sed 's/ \{1,\}/\:/g' ../metod/query4 | > cut -f3,4 -d':' | > sed -n '/-FEB-91/p' | > sort +0 -1 -t':' -u | > join -j1 1 -j2 1 -t':' -a2 - temp01 | > sed -n '/[:]*:[:]*$/'p | > cut -f2 -d':' | > sort +0 -1 >result bash2-2.05$ rm -f temp* bash2-2.05$ cat result AL AND BOB'S SPORTS AL'S PRO SHOP ALL SPORT AT BAT BOB'S FAMILY SPORTS BOB'S SWIM, CYCLE, AND RUN CENTURY SHOP EVERY MOUNTAIN FAST BREAK GOOD SPORT HIT, THROW, AND RUN HOOPS JOCKSPORTS JOE'S BIKE SHOP JUST BIKES JUST TENNIS POINT GUARD REBOUND SPORTS SHAPE UP STADIUM SPORTS THE ALL AMERICAN THE COLISEUM THE OUTFIELD THE POWER FORWARD THE TOUR TKB SPORT SHOP VELO SPORTS WHEELS AND DEALS WOMENS SPORTS bash2-2.05$ Script done on Thu Sep 5 08:17:08 2002 |
Завдання 2, варіант 3
Визначити імена й прізвища всіх, що служать фірми, які працюють в одному місті із президентом.
У принципі, це завдання можна розв'язати, і не прибігаючи до реляційних операцій, але ми розв'яжемо її саме таким чином, тому що серед не розглянутих нами є варіанти, які вимагають саме такого підходу.
Хоча всі обирані дані перебувають в одній таблиці, нам необхідно буде застосувати тут автосоединение - з'єднання таблиці із самої собою.
Розв'язок:
sed 's/ \{1,\}/\:/g' ../metod/query1 >temp01 |
Установка роздільника ':' у файлі query1 (просто для зручності). Збереження в temp01. |
sed -n '/:PRESIDENT:/p' temp01 >temp02 |
Виділення рядка президента. Збереження в temp02. |
sed '/:PRESIDENT:/d' temp01 | |
Видалення рядка президента. |
cut -f4,6,7 -d':' temp01 >temp03 |
Виділення полів прізвища, назви відділу, міста. Збереження в temp03. |
cut -f6 -d':' temp02 >temp01 |
Виділення назви відділу в рядку президента. Збереження в temp01. |
sort +1 -2 -t':' temp03 | |
Сортування інших службовців по полю назви відділу. |
join -j1 2 -j2 1 -t':' - temp01 | |
З'єднання з назвою відділу президента, збереженим в temp01. |
cut -f2 -d':' | |
Виділення з результату прізвищ службовців. |
sort +0 -1 -t':' >temp04 |
Сортування прізвищ і збереження їх в temp04. |
cut -f7 -d':' temp02 >temp01 |
Виділення міста в рядку президента. Збереження в temp01. |
sort +2 -3 -t':' temp03 | |
Сортування інших службовців по полю міста. |
join -j1 3 -j2 1 -t':' - temp01 | |
З'єднання з містом президента, збереженим в temp01. |
cut -f2 -d':' | |
Виділення з результату прізвищ службовців. |
sort +0 -1 -t':' | |
Сортування прізвищ. |
join -j1 1 -j2 1 - temp04 >result |
З'єднання тих, у кого збігається відділ, з тими, у кого збігається місто. Результат зберігається. |
rm -f temp* |
Видалення тимчасових файлів. |
Протокол виконання:
Script started on Thu Sep 5 08:20:36 2002 bash2-2.05$ sed 's/ \{1,\}/\:/g' ../metod/query1 >temp01 bash2-2.05$ sed -n '/:PRESIDENT:/p' temp01 >temp02 bash2-2.05$ sed '/:PRESIDENT:/d' temp01 | > cut -f4,6,7 -d':' temp01 >temp03 bash2-2.05$ cut -f6 -d':' temp02 >temp01 bash2-2.05$ sort +1 -2 -t':' temp03 | > join -j1 2 -j2 1 -t':' - temp01 | > cut -f2 -d':' | > sort +0 -1 -t':' >temp04 bash2-2.05$ cut -f7 -d':' temp02 >temp01 bash2-2.05$ sort +2 -3 -t':' temp03 | > join -j1 3 -j2 1 -t':' - temp01 | > cut -f2 -d':' | > sort +0 -1 -t':' | > join -j1 1 -j2 1 - temp04 >result bash2-2.05$ rm -f temp* bash2-2.05$ cat result CLARK KING MILLER bash2-2.05$ Script done on Thu Sep 5 08:20:56 2002 |
