Задание:
В данной лабораторной работе Вам предлагается разработать последовательности команд для решения трех задач обработки текстовых файлов. Основным инструментом для решения этих задач для Вас будут, по-видимому (но не обязательно), будет редактор sed и утилита соединения join. Другие средства Вы выберете сами. Однако, запрещается использовать в этой работе утилиту awk.
- В одном из текстовых файлов из каталога text поменять местами первую и последнюю строки файла.
- Из информации, содержащейся в файлах query…, определить фамилию продавца, который первым продал товар ‘SP JUNIOR RACKET’ в 1991 г.
- Определить количество файлов в каталоге /etc, которые созданы не в этом году.
Выполнение
1.
Был написал следующий скрипт (1.sh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash #Этот файл выполняет задание лабораторной работы номер 4 по дисциплине UNIX пункт 1 echo 'Введите имя входного файла: ' read infile echo 'Введите имя выходного файла: ' read outfile rm $outfile # запись последней строки входного файла в выходной sed -n '$p' $infile >> $outfile # запись всех строк, кроме 1-й и последней в выходной файл sed -n -e '1d' -e '$d' -e 'p' $infile >> $outfile # запись первой строки в выходной файл sed -n '1p' $infile>> $outfile |
2.
Был написан скрипт (файл 2.sh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/sh #Задание 2 лабораторной работы 4 по дисциплине "Unix" #Получение кода товара SP JUNIOR RACKET sed -n '/^.\{6\}!SP JUNIOR RACKET/p' query3 | cut -d'!' -f 1 >temp01 #Получение списка всех продаж этого товара sed 's/ \{1,\}/\:/g' query5 | sort -k 3 -n -t':'>temp02 join -t':' -2 3 temp01 temp02 |sort -k 3 -n -t':' > temp03 #Установка разделителей для заказов sed 's/ \{1,\}/\:/g' query4 |cut -f1,4,2 -d':' |sort -k 1 -n > temp04 join -t':' -1 3 temp03 temp04 >temp05 sed -n '/-91$/p' temp05| cut -f7 -d':'| sed -n '1p' |
3.
Год записан в 6-ом поле. Следовательно необходимо пропустить 5 разделителей поля и дальше должно идти что-нибудь отличное от 2007. Подсчёт строк осуществляется с помощью программы wc. Параметр –l говорит о том, что подсчитываются символы перевода строки.
Был написан следующий скрипт (3.sh):
1 2 3 4 |
#!/bin/sh #Пункт 3 лабораторная работа 4 дисциплина "unix" echo 'Количество файлов, которые созданы не в 2007-м году:' ls -l /etc| sed -e 's/ \{1,\}/\:/g' |sort -k 6,6 -t':'| sed -n -e '/^.*:.*:.*:.*:.*:2007-/!p'| sed -n -e '/^d/!p' |wc -l |