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

Приклад 3

Завдання За інформацією файлів /home/metod/query* для заданого коду товару визначити, скільки його екземплярів було продано в заданий місяць.

Формат застосування:

команда місяць код_товару...

Місяць задається у форматі: MON-YY, наприклад: JAN-90, JUN-89, NOV-17 і т.п.

Cкрипт названий ex7_3, його текст із докладними коментарями приводиться нижче.

#!/bin/bash2

# ============================================================== #

# Скрипт ex7_3: вибірка обсягу продажів заданого товару #

# ============================================================== #

# Вибирається 1-й параметр і список параметрів зрушується

mon=$1; shift

# =======================================================

# Місяць записується у файл

echo "$mon" >$HOME/temp01

# =======================================================

# Інші параметри команди являють собою список кодів товарів.

# Цикл, який виконується доти, поки залишаються

# неопрацьовані параметри.

while [ $# -ne 0 ]

do

# =====================================================

# Код товару запам'ятовується в змінній і записується у файл

code=$1

echo "$code" >$HOME/temp02

# =====================================================

# КОНВЕЄР 1

# =====================================================

# У файлі query5 віддаляються зайві пробіли

sed -n 's/ */ /gp' /home/metod/query5 |

# =====================================================

# Вибираються стовпці: код замовлення, код товару, кількість

cut -f2,3,5 -d' ' |

# =====================================================

# Сортування по коду товару

sort +1 -2 -t' ' |

# =====================================================

# З'єднання з файлом - кодом товару

join -j1 2 -j2 1 -t' ' - $HOME/temp02 |

# =====================================================

# Вибираються стовпці: код замовлення, кількість

# (код товару більше не потрібний)

cut -f2,3 -d' ' |

# =====================================================

# Сортування по коду замовлення й збереження у файлі

sort +0 -1 -t' ' >$HOME/temp03

#

# =====================================================

# КОНВЕЄР 2

# =====================================================

# У файлі query4 віддаляються зайві пробіли

sed -n 's/ */ /gp' /home/metod/query4 |

# =====================================================

# Вибираються стовпці: код замовлення, дата

cut -f1,4 -d' ' |

# =====================================================

# Сортування по коду замовлення

sort +0 -1 -t' ' |

# =====================================================

# З'єднання з файлом - місяцем

sed -n '/'$mon'/p' |

# =====================================================

# Вибирається стовпець коду замовлення

# (дата більше не потрібна)

cut -f1 -d' ' |

# =====================================================

# Сортування по коду

sort +0 -1 -t' ' |

# =====================================================

# З'єднання з файлом замовлень по заданому товару

join -j1 1 -j2 1 - $HOME/temp03 |

# =====================================================

# Вибирається стовпець кількості

cut -f2 -d' ' >$HOME/temp01

# =====================================================

# Початкове значення суми - 0

sum=0

# =====================================================

# Уміст файлу temp01 составляеn список циклу for

for value in `cat $HOME/temp01`

do

# ===================================================

# Підсумовування елементів списку

sum=`expr "$sum" + "$value"`

done

# =====================================================

# Вивід результату

echo "Продане товару $code в $mon - $sum шт."

# =====================================================

# Зрушення списку параметрів

shift

# =====================================================

# Кінець циклу перебору параметрjв

done

# =======================================================

# Після виходу із циклу - видалення тимчасових файлів

rm $HOME/temp01

rm $HOME/temp02

rm $HOME/temp03

# ======== Кінець скрипта ex7_3 ================================= #

Зразок виконання створеної команди:

bash2-2.05$ sh sss JAN-91 100860 100861 100862

Продане товару 100860 в JAN-91 - 100 шт.

Продане товару 100861 в JAN-91 - 20 шт.

Продане товару 100862 в JAN-91 - 0 шт.

bash2-2.05$