Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Приклад виконання лабораторної роботи N5Содержание книги
Поиск на нашем сайте
Приклад 1-1 Кожне друге слово кожного рядка вивести в окремий наступний рядок. Якщо в рядку тільки одне слово, нічого не робити. Розв'язок виявляється найпростішим. У якості символу-роздільника в тексті використовується пробіл, отже, при виклику awk визначати роздільник явно не потрібно. Слова становлять поля. Ніяких спеціальних дій на початку або наприкінці обробки вживати не потрібно. При обробці кожного рядка слід спочатку вивести повний текст рядка ($0), а потім перевірити довжину другого поля рядка ($2). Якщо довжина цього поля - 0, то друге слово в рядку відсутнє, і нічого вживати не потрібно. Якщо довжина відмінна від 0, друге поле виводиться в наступний рядок. Повний текст програми awk і протокол її виконання виглядає так:
Приклад 1-2 Перший символ кожного рядка замінити на перший символ наступного рядка. Останній рядок залишається без змін. Розв'язок цього завдання складніше, але не набагато. Ми можемо виводити рядок тільки після того, як прочитаємо наступний рядок. Тому вводимо змінну buf, яка відіграє роль буфера для запам'ятовування попереднього рядка. При обробці першого рядка (номер рядка можна визначити по системній змінної NR) її повний уміст тільки запам'ятовується в буфері. При обробці будь-якого наступного рядка на печатку виводиться перший символ прочитаного рядка й текст рядка, запомненной у буфері (попереднього рядка) без першого символу. Після закінчення читання файлу в буфері залишається текст останнього рядка, який повинен бути також виведений. Для виділення першого символу рядка й залишку рядка без першого символу використовується функція substr(). Повний текст цієї програми awk і протокол її виконання виглядає так:
Приклад 1-3
У передостанньому рядку, який закінчується крапкою, поміняти місцями перше слово з останнім. Розв'язок цього завдання більш складне. Складність полягає в тому, що ми не знаємо, який рядок повинна бути модифікована, поки не прочитаємо весь файл. Розв'язок полягає в тому, що поточна обробка файлу буде в основному полягати в збереженні рядків у буфері. Буфер повинен являти собою масив рядків, який буде містити всі рядки файлу. Разом з нагромадженням рядків у буфері ми визначаємо, чи є останній символ рядка крапкою, і запам'ятовуємо номера двох останніх рядків із крапкою. Після закінчення читання файлу буфер містить повний текст файлу, і ми знаємо номери останньої й передостанньої рядків із крапкою. У заключній обробці (по шаблонові END) ми перебираємо рядка, збережені в буфері. Якщо номер чергового рядка не збігається з номером передостаннього рядка із крапкою, друкуємо цей рядок без змін. Якщо ж це той самий рядок, то при печатці вона модифікується. Ми використовуємо функцію awk split(), яка розбиває рядок на поля, розділені заданим символом. Частини рядка містяться в заданий масив, а функція повертає число полів, яке вона виявила в рядку. У нашому випадку роздільником є пробіл, а полями - слова. На печатку виводиться спочатку останній елемент масиву - результату функції split(), потім усі елементи із другого по передостанній, і нарешті - перший елемент. Таким чином, у рядку, що друкується, перше й останнє слова міняються місцями. Повний текст програми awk і протокол її виконання виглядає так:
Приклад 2-3.1
У файлі query3 визначити товар з найбільшою різницею мінімальної й максимальної ціни Розв'язок надзвичайний простої. Це тривіальний алгоритм пошуку максимуму, цикл перебору рядків організує для нас awk. Максимальна й мінімальна ціни становлять 3-е й 4-е поля рядка відповідно. Для ідентифікації товару слід запам'ятати також і його назва - поле 2. Роздільником полів у файлі query3 є символ "!", так що awk повинна викликатися з опцією -F, що визначає роздільник. Повний текст програми awk і протокол її виконання виглядає так:
Приклад 2-3.2 У файлі query2 визначити всіх покупців, у яких кредит вище за середнє Розв'язок цього завдання вимагає перебрати всі рядки файлу двічі - спочатку для обчислення середньої суми кредиту, а потім для визначення покупців, у яких кредит вище за середнє. Тому при переборі рядків файлу awk у буфері зберігаються необхідні дані (ім'я покупця й кредит) усіх рядків і виконується нагромадження суми кредиту по всіх рядках. Роль буфера відіграють два масиви - один для імен покупців, а іншої - для їхніх кредитів. При виконанні заключних дій сума кредиту усредняется, а потім перебираються збережені в буфері дані й виводяться ті з них, які відповідають умові. Повний текст програми awk і протокол її виконання виглядає так:
Приклад 2-3.3 У файлі query2 визначити покупця, який має максимальну цифру номера будинку.
Розв'язок задоволений простої, сам алгоритм пошуку максимуму не представляє інтересу, оборотний увага на роботу з номером будинку. Аналіз файлу query2 показує, що адреса є третім полем у файлі, а номер будинку (якщо він присутній) - завжди перше слово в адресі. Однак не у всіх адресах зазначений номер будинку, адреси без цієї складової можна просто виключити з обробки. Це можна зробити за допомогою шаблону. Номер будинку виділяється з адреси при помрщи функції split(), роздільником слів в адресі є пробіл. Повний текст програми awk і протокол її виконання виглядає так:
Приклад 2-3.4 У файлі query3 визначити суму продажів для кожного року. Розв'язок знов-таки вимагає деякого нагромадження даних. Ми заздалегідь не знаємо навіть, у які роки здійснювалися продажі. Тому нам доведеться ввести два масиви із синхронною індексацією: в одному ми будемо фіксувати рік, а в іншому - число продажів цього року. При переборі рядків файлу випливає в кожному рядку виділяти рік продажу й перевіряти, чи є такий рік у нашому масиві років. Якщо такого року ні, ми додаємо новий елемент у масив років і встановлюємо відповідний йому новий елемент у масиві лічильників продажів в 1. Якщо такий рік уже є, ми збільшуємо відповідний йому новий елемент у масиві лічильників продажів на 1. Повний текст програми awk і протокол її виконання виглядає так:
|
|||||||||||||||||||||
Последнее изменение этой страницы: 2020-12-09; просмотров: 88; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.242.84 (0.009 с.) |