Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_lab_OSUNIX_2006-ukr.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
760 Кб
Скачать
☆

6.3.8.11 Змінні поля

До полів, що належать поточному запису, можна звертатися через змінні $1, $2, ..., $NF. Змінні поля мають ті ж властивості, що й всі інші змінні: вони можуть використовуватися в арифметичних і рядкових операціях, їм можуть привласнюватися значення. Так, наприклад, значення другого поля у файлі countries можна розділити на 1000, щоб перевести тисячі квадратних миль у мільйони:

{ $2 /= 1000; print }

або занести в поле новий рядок:

BEGIN { FS = OFS = "\t" }

$4 == "North America" { $4 = "NA" }

$4 == "South America" { $4 = "SA" }

{ print }

Дія BEGIN у програмі пов'язана із призначенням як роздільник вхідних полів FS і роздільника вихідних полів OFS символу табуляції. Оператор print у четвертому рядку програми виводить значення $0 після модифікації.

До полів можна звертатися й через вираження

6.3.8.12 Деякі лексичні угоди

У програмах мовою awk дозволяється використання коментарів, вони починаються із символу # і закінчуються кінцем рядка, наприклад:

print x, y # це коментар

Оператори в програмі звичайно розташовуються кожний на окремому рядку. При розташуванні декількох операторів в одному рядку, вони розділяються символом "крапка з комою". Довгий оператор може займати кілька рядків, кожний з яких у тому випадку, якщо логіка вимагає продовження, завершується символом "\". Необхідність у явному використанні символу продовження, проте, виникає рідко, оскільки, якщо рядок закінчується операторами типу && і || або комою, що випливає, рядок інтерпретується як продовження попередньої автоматично.

6.3.8.13 Вивід у файли

Вивід може бути спрямований у файли за допомогою операторів перепризначення > і >>. Як приклад розглянемо програму, що виводить із файла countries всі рядки із чисельністю населення, що перевищує 100 млн., у файл із ім'ям bigpop, а інші рядки у файл із ім'ям smallpop:

$3 > 100 { print $1, $3 >"bigpop" }

$3 <= 100 { print $1, $3 >"smallpop" }

Слід звернути увагу на те, що імена файлів мають бути укладені в лапки; у протилежному випадку bigpop і smallpop були б тільки не проініціалізованими змінними. Якби імена вихідних файлів створювалися за допомогою вираження, їх необхідно було б також взяти в круглі дужки:

$4 ~ /North America/ { print $1 > {"tmp" FILENAME) }

Причиною цього є те, що оператор > має більш високий пріоритет перед конкатенацією. У випадку відсутності круглих дужок конкатенація tmp і FILENAME не відбудеться.

6.3.8.14 Вивід у канали

Вивід можна також перепризначити у канал. Оператор

print | "командна_рядок"

визначає командний рядок перетворень вивідного потоку.

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

6.4 Порядок виконання роботи

1. З середовища операційної системи викликати протокол telnet для того, щоб отримати ресурси ОС UNIX.

2. Ознайомитися з можливостями awk.

3. Навчитися виконувати програми awk з командного рядка.

4. Навчитися виконувати програми awk з файлу.

5. Розробити командний файл, що забезпечує реалізацію завдання викладача.