Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Виділення рядків за значенням у стовпціСодержание книги
Поиск на нашем сайте
але в деяких випадках (якщо важко сформулювати специфікації_визначальні_позицію) може виявитися зручніше застосувати штучне приймання: записати шукане_значення в окремий файл і виконати його з'єднання з вихідним файлом: # запис шуканого_значення в тимчасовий файл echo " шукане_значення " >$HOME/tempfile # сортування вихідного файлу по необхідному стовпцю sort + позиція-1 - позиція -t' разделитель ' файл | # з'єднання: 1-й файл - результат попередньої команди, у ньому # для з'єднання береться необхідний стовпець, 2-й файл - тимчасовий # файл, у ньому - стовпець перший і єдиний join -j1 позиція -j2 1 -t' разделитель ' - $HOME/tempfileПриклад 1 Завдання Формат застосування цієї команди повинен бути: команда користувач...Нижче ми приводимо текст скрипта (ми назвали його ex7_1) з докладними коментарями. #!/bin/bash2 # ============================================================== # # Скрипт ex7_1: відправлення повідомлення/листа заданим користувачам # # ============================================================== # # Коментар!/bin/bash2 описує місцезнаходження командного # інтерпретатора shell. Він допомагає системі знайти інтерпретатор, # а також допомагає команді file визначити тип файла-скрипта. # У більшості випадків він не є обов'язковим, але є # "правилом гарного тону" у програмуванні. # ======================================================= # # Текст повідомлення/листа заноситься у файл temp01 # Зверніть увагу: тимчасовий файл розміщається в домашньому # каталозі користувача. echo Це тестове повідомлення > $HOME/temp01 echo для перевірки зв'язку зі скрипта. >>$HOME/temp01 echo Бажаю успіху! >>$HOME/temp01 echo ap10999 >>$HOME/temp01 # ======================================================== # Параметри команди являють собою список імен користувачів. # Наступним оператором організує цикл, який виконується до # тих пор, поки залишаються неопрацьовані параметри. while [ $# -ne 0 ] do # ====================================================== # Значення 1-го параметра привласнюється змінної us us=$1 # ====================================================== # Віддаляється файл temp02. Зверніть увагу: діагностика команди # rm пригнічується (направляється в "системну корину"). Ця діагностика # може повідомляти про те, що файлу, що віддаляється, не існує - # вона нам не потрібна. rm $HOME/temp02 2>/dev/null # ====================================================== # Спроба видачі повідомлення користувачеві. # Системне введення команди write направляється на файл temp01. # Якщо не вдається встановити з'єднання з користувачем (користувача # немає в системі або він заблокував свій термінал) команда write # виводить діагностичне повідомлення (ми його пригнічуємо) і # повертає false. if write $us <$HOME/temp01 2>/dev/null then # ==================================================== # Якщо повідомлення пройшло - OK! виводимо на свій термінал # повідомлення про цей, і - "обробка користувача" закінчена. echo "Користувачеві $us відправлене повідомлення" else # ==================================================== # Якщо повідомлення не пройшло - спроба відправлення листа # Системне введення команди mail направляється на файл temp01. # Команда mail завжди повертає true. Вона тільки запускає # дочірній процес sendmail, і, якщо відправлення листа не вдалося, # це буде з'ясовано тільки в дочірньому процесі, яка видасть # діагностику, цю діагностику перенаправляємо в тимчасовий # файл temp02. mail $us <$HOME/temp01 >$HOME/temp02 # ==================================================== # Очікуємо 1 сек, щоб дочірній процес встигнув записати # у файл temp02 повідомлення про те, що лист не відправлений sleep 1 # ==================================================== # Перевіряємо, чи їсти що-небудь у файлі temp02 if test -s $HOME/temp02 then # ================================================== # Якщо файл temp02 не порожній - користувач не знайдений echo "Користувач $us не знайдений" # ================================================== # у цьому випадку лист попадає у файл dead.letter, # який нам не потрібний rm $HOME/dead.letter 2>/dev/null else # ================================================== # Якщо файл temp02 порожній - лист відправлений echo "Користувачеві $us відправлений лист" # ==================================================== # Кінець умови if test -s $HOME/temp02 fi # ====================================================== # Кінець умови if write $us... fi # ====================================================== # Зрушення списку параметрів shift # ======================================================== # Кінець циклу while done # ======================================================== # Після виходу із циклу # Віддаляються тимчасові файли rm $HOME/dead.letter 2>/dev/null rm $HOME/temp01 2>/dev/null rm $HOME/temp02 2>/dev/null # ======== Кінець скрипта ex7_1 ================================= #Нижче наведений зразок виконання створеної команди:
Приклад 2 Завдання Формат застосування цієї команди повинен бути: команда каталог...Cкрипт названий ex7_2, його текст із докладними коментарями приводиться нижче. #!/bin/bash2 # ============================================================== # # Скрипт ex7_2: пошук співпадаючих перших рядків # # ============================================================== # # ======================================================== # Запам'ятовуємо поточний каталог mydir=`pwd` # ======================================================== # Параметри команди являють собою список каталогів. # Наступним оператором організує цикл, який виконується до # тих пор, поки залишаються неопрацьовані параметри. while [ $# -ne 0 ] do # ====================================================== # Перехід у каталог, що задається 1-м параметром; # діагностика направляється в тимчасовий файл cd $1 2>$HOME/temp01 # ====================================================== # Перевірка - не чи порожній файл із діагностикою if test -s $HOME/temp01 then # ==================================================== # Якщо є діагностика - каталог недоступний echo "Каталог $1 недоступний/не існує" # ==================================================== # Перехід до наступного параметра shift # ==================================================== # Пропуск залишку тіла циклу continue fi # ====================================================== # Ми ввійшли в заданий каталог echo "Каталог: $1" # ====================================================== # Вибираються файли розміром більше 0, # список файлів направляється в потік find -size +0c -type f | # ====================================================== # Файли в списку виведені із вказівкою каталогу./, # від цих символів потрібно позбутися; # результат записується в тимчасовий файл sed 's/.\///' >$HOME/temp01 # ====================================================== # Цикл поки у файлі temp01 щось залишається while test -s $HOME/temp01 do # ==================================================== # Вибирається в змінну $f1 перший рядок з # тимчасового файлу - ім'я чергового файлу f1=`head -n1 $HOME/temp01` # ==================================================== # Вибирається в змінну $s1 перший рядок з # обраного файлу s1=`head -n1 $f1` # ==================================================== # $n - ознака того, що збіг рядків не знайдений # $m - номер другого файлу зі списку n="no"; m=2; # ==================================================== # Нескінченний цикл - вихід по break while [ 1 ] do # ================================================== # Вибирається $ m-я рядок зі списку файлів - ім'я файлу f2=`sed -n ''$m'p' $HOME/temp01` # ================================================== # Якщо обраний порожній рядок - список файлів закінчився if [ "$f2" = "" ]; then # ================================================ # у цьому випадку - вихід із циклу break # ================================================ # Кінець умови if [ "$f2" = "" ] fi # ================================================== # Вибирається 1-я рядок із цього файлу s2=`head -n1 $f2` # ================================================== # Рядок рівняється із запомненной раніше рядком з 1-го # файлу в списку if [ "$s1" = "$s2" ]; then # ================================================ # Перевірка - чи були вже збігу if [ "$n" = "no" ]; then # ============================================== # Якщо збігів не було - виводиться ім'я 1-го файлу зі списку echo -n "$f1 "; n="yes" # ============================================== # Кінець умови if [ "$n" = "no" ] fi # ================================================ # Виводиться ім'я файлу, у якому знайдений збіг echo -n "$f2 " # ================================================ # Файлу, у якому знайдений збіг, віддаляється з файлу-списку sed ''$m'd' $HOME/temp01 > $HOME/temp02 cat $HOME/temp02 >$HOME/temp01 # ================================================ # Кінець дій при збігу else # ================================================ # Якщо немає збігу - перехід до наступного файлу зі списку m=`expr $m + 1` # ================================================ # Кінець дій при відсутності збігу fi # ================================================== # Кінець циклу перебору інших файлів списку done # ==================================================== # Якщо були знайдені збіги - виводиться текст загального рядка if [ "$n" = "yes" ]; then echo "- $s1" fi # ==================================================== # Видалення 1-й рядка зі списку імен файлів sed '1d' $HOME/temp01 > $HOME/temp02 cat $HOME/temp02 >$HOME/temp01 # ==================================================== # Кінець циклу перебору імен файлів done # ====================================================== # Перехід до наступного параметра shift # ====================================================== # Кінець списку перебору параметрів done # ======================================================== # Видалення тимчасового файлу rm $HOME/temp* # ======================================================== # Повернення у вихідний каталог cd "$mydir" # ======== Кінець скрипта ex7_2 ================================= #Зразок виконання створеної команди:
Приклад 3 Завдання Формат застосування: команда місяць код_товару...Місяць задається у форматі: 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 ================================= #Зразок виконання створеної команди:
|
||||||||
|
Последнее изменение этой страницы: 2020-12-09; просмотров: 127; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.006 с.) |