Деякі приклади програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Деякі приклади програмування



Описані нижче деякі приймання програмування, можливо, допоможуть Вам у розв'язку Вашого завдання. У більшості випадків Вам знадобляться команди обробки текстів і потоковий редактор sed. Інформацію про файли, як правило, можна одержати від команди ls і інших команд файлової системи. Короткі описи всіх необхідних команд є в нашій довідковій системі.

Конвеєри й тимчасові файли


 При розв'язку більшості завдань Вам доведеться застосовувати конвеєри команд. Не завжди, однак, вдається безпосередньо використовувати вихід однієї команди на вході іншої. Іноді потрібно підготувати два джерела даних (наприклад, для з'єднання), іноді доцільно зберегти результати виконання команди для повторного їхнього використання. У таких випадках можна зберігати результати в тимчасовому файлі.

Однак, формуючи ім'я тимчасового файлу, не забувайте про те, що Ви можете не мати прав на створення файлів у тому каталозі, який є поточним у момент виконання команди. Тому тимчасові файли доцільно створювати в домашньому каталозі користувача, що виконує скрипт. Таким чином, виконання команди з перенапрямком її результату в тимчасовий файл буде виглядати так:

команда параметри... > $HOME/tempfile

Обробка списку параметрів


 Якщо у Вашому завданні передбачається обробка списку параметрів, то вона може бути виконана в такому циклі:

while [ $# -ne 0 ] do обробка параметра $1 shitf done

У кожній ітерації цього циклу обробляється 1-й параметр ($1). Наприкінці циклу командою shift список параметрів зрушується, 2-й параметр стає першим і т.д. Цикл виконується доти, поки кількість параметрів у списку ($#) не стане рівним 0.

Обробка структурованих файлів


 У деяких завданнях файли складаються з текстів, організованих у рядки й стовпці. Такі ж тексти видають на виході деякі системні утиліти, наприклад, утиліта ls с опцією -l. Для обробки таких файлів зручно використовувати команди, орієнтовані на структуровані файли: виділення полів - cut, сортування - sort, реляційне з'єднання - join (не забувайте, що join вимагає, щоб файли були попередньо відсортовані!). Випливає, однак, мати на увазі, по-перше, що в цих команд різні опції завдання роздільників у тексті, і при їхнім спільному вживанні слід бути уважним щодо цього, а по-друге, те, що поля в структурованих файлах найчастіше розділяються змінним числом пробілів, а всі ці команди вимагають єдиного роздільника між полями. Тому перш ніж застосовувати до структурованого файлу таку команду, потрібно замінити множинні пробіли єдиним, що можна зробити, наприклад, таким звертанням до потокового редактора sed:

sed-n's/ */ /gp'

яка заміняє один пробіл і будь-яка кількість наступних за ним пробілів на один пробіл. (У цій команді редагування в шаблону пошуку перед символом '*' коштують два пробіли, а шаблон заміни складається з єдиного пробілу. Опція g пропонує замінити всі входження.)

 Як правило, у завданнях, зв'язаних зі структурованими файлами, обробляються тільки вибрані поля файлу. Рекомендуємо Вам для полегшення своєї роботи вже на початковому етапі обробки позбутися непотрібних стовпців за допомогою команди cut

Порядкова обробка файлів


 Припустимо (типова для деяких завданнях ситуація), що нам потрібно читати деякої файл - вихідний_файл рядок за рядком і обробляти кожний рядок. Деякі з можливих варіантів такої обробки наступні:

Увести змінну - номер рядка й використовувати значення цієї змінної при формуванні шаблону пошуку для команди sed або grep:

1.      # початкове значення лічильника рядків - 12.      n=13.      # нескінченний цикл, вихід - по break4.      while [ 1 ]5.        do6.        # виконується sed, операція печатки рядків,7.        # значення змінної $s підставляється в номер рядка.8.        # результат sed - прочитаний рядок - привласнюється9.        # змінної value10.  value=`sed -n ''$n'p' вихідний_файл `11.  # якщо в value прочитався порожній рядок - вихід із циклу12.  if [ "$value" = "" ]; then13.    break;14.    fi15.  обробка $value 16.  # обчислення нового номера рядка17.  n=`expr $n +1'18.  done
    1. Виконувати в кожній ітерації циклу читання й обробку першого рядка файлу, а потім видаляти її з файлу:
20. # цикл виконується поки у вихідному файлі є рядка21. while -s test вихідний_файл 22.  do23.  # читається 1-я рядок і її значення привласнюється24.  # змінної value25.  value=`head -n1 вихідний_файл `26.  обробка $value 27.  # видалення 1-й рядка з файлу28.  # результат перенаправляється в тимчасовий файл, потім29.  # вихідний_файл віддаляється, тимчасовий файл30.  # перейменовується у вихідний_файл 31.  sed '1d' вихідний_файл > $HOME/temp132.  rm вихідний_файл 33.  mv $HOME/temp1 вихідний_файл 34.  done
    1. Якщо текст вихідного_файлу не містить пробілів, то можна використовувати цикл for.
36. # список для циклу зчитується з вихідного_файлу 37. for value in `cat вихідний_файл `38.  do39.  обробка $value   done

 Майте на увазі, що якщо текст вихідного_файлу містить пробіли, то в кожній ітерації циклу буде зчитуватися одне слово.



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 69; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.59.187 (0.005 с.)