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

Завдання 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