- Скануйте файли, рядок за рядком.
- Розбийте кожен рядок на поля / стовпці.
- Вкажіть шаблони та порівняйте рядки файлу з цими шаблонами
- Виконайте різні дії на лініях, які відповідають заданому шаблону
У цій статті ми пояснимо основне використання команди awk та те, як її можна використовувати для розділення файлу рядків. Ми виконали приклади з цієї статті на системі Debian 10 Buster, але їх можна легко відтворити на більшості дистрибутивів Linux.
Зразок файлу, який ми будемо використовувати
Зразок файлу рядків, який ми будемо використовувати для демонстрації використання команди awk, такий:
Ось що вказує кожен стовпець зразкового файлу:
- Перший стовпець містить ім’я працівників / викладачів школи
- Друга колонка містить предмет, який викладає працівник
- У третій колонці вказується, чи є працівник професором чи асистентом
- Четверта колонка містить заробітну плату працівника
Приклад 1: Використовуйте Awk для друку всіх рядків файлу
Друк кожного рядка вказаного файлу є поведінкою команди awk за замовчуванням. У наступному синтаксисі команди awk ми не вказуємо жодного шаблону, який awk повинен надрукувати, отже команда повинна застосовувати дію «друк» до всіх рядків файлу.
Синтаксис:
$ awk 'print' ім'я файлу.txtПриклад:
У цьому прикладі я кажу команді awk надрукувати вміст мого зразкового файлу, рядок за рядком.
$ awk 'print' sample_file.txt
Приклад 2: Використовуйте awk для друку лише тих рядків, які відповідають заданому шаблону
За допомогою awk ви можете вказати шаблон, і команда буде друкувати лише ті рядки, які відповідають цьому шаблону.
Синтаксис:
$ awk '/ pattern_to_be_matched / print' ім'я файлу.txtПриклад:
Зі зразкового файлу, якщо я хочу надрукувати лише рядки, що містять змінну 'B', я можу використати таку команду:
$ awk '/ B / print' sample_file.txt
Щоб зробити приклад більш значущим, дозвольте мені надрукувати лише інформацію про працівників, які є "професорськими".
$ awk '/ Professor / print' sample_file.txt
Команда друкує лише рядки / записи, які містять рядок “професор”, таким чином ми маємо більш цінну інформацію, отриману з даних.
Приклад 3. Використовуйте awk, щоб розділити файл так, щоб друкувалися лише певні поля / стовпці
Замість того, щоб друкувати весь файл, ви можете зробити awk для друку лише певних стовпців файлу. Awk за замовчуванням розглядає всі слова, розділені пробілами, у рядку як запис у стовпці. Він зберігає запис у змінній $ N. Де 1 долар представляє перше слово, 2 долари зберігають друге слово, 3 долари четверте тощо. $ 0 зберігає цілий рядок, таким чином, хто друкує рядок, як пояснено в прикладі 1.
Синтаксис:
$ awk 'надрукувати $ N,… . 'ім'я файлу.txtПриклад:
Наступна команда надрукує лише перший стовпець (ім’я) та другий стовпець (тема) мого зразкового файлу:
$ awk 'print $ 1, $ 2' sample_file.txt
Приклад 4: Використовуйте Awk для підрахунку та друку кількості рядків, у яких узгоджується шаблон
Ви можете сказати awk підрахувати кількість рядків, у яких відповідає вказаний шаблон, а потім вивести це "count".
Синтаксис:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'ім'я файлу.txt
Приклад:
У цьому прикладі я хочу підрахувати кількість осіб, які викладають предмет "англійська". Тому я скажу команді awk, щоб вона відповідала шаблону “англійська” та надрукувала кількість рядків, у яких цей шаблон відповідає.
$ awk '/ англійська / ++ cnt END print "Count =", cnt' sample_file.txt
Підрахунок тут свідчить про те, що 2 особи викладають англійську мову із зразків записів файлів.
Приклад 5: Використовуйте awk для друку лише рядків із більш ніж певною кількістю символів
Для цього завдання ми будемо використовувати вбудовану функцію awk, яка називається “length”. Ця функція повертає довжину вхідного рядка. Таким чином, якщо ми хочемо, щоб awk друкував лише рядки з кількістю символів, що перевищує або навіть менше, ми можемо використовувати функцію length таким чином:
Для друку рядків із символами, більшими за число:
$ awk 'length ($ 0)> n' ім'я файлу.txtДля друку рядків із символами менше числа:
$ awk 'довжина ($ 0) < n' filename.txtДе n - кількість символів, які потрібно вказати для рядка.
Приклад:
Наступна команда надрукує лише рядки з мого зразкового файлу, символи яких перевищують 30:
$ awk 'length ($ 0)> 30' sample_file.txt
Приклад 6: Використовуйте awk для збереження виводу команди в інший файл
Використовуючи оператор переспрямування '>', ви можете використовувати команду awk для друку його вихідних даних в інший файл. Це спосіб використання:
$ awk 'критерії_друку "ім'я файлу.txt> вихідний файл.txtПриклад:
У цьому прикладі я буду використовувати оператор перенаправлення з моєю командою awk для друку лише імен співробітників (стовпець 1) у новий файл:
$ awk 'print $ 1' sample_file.txt> імена працівників.txt
Я перевірив за допомогою команд cat, що новий файл містить лише імена співробітників.
Приклад 7: Використовуйте awk для друку лише непустих рядків із файлу
Awk має кілька вбудованих команд, які ви можете використовувати для фільтрації вихідних даних. Наприклад, команда NF використовується для ведення підрахунку полів у поточному вхідному записі. Тут ми будемо використовувати команду NF для друку лише непорожніх рядків файлу:
$ awk 'NF> 0' sample_file.txtОчевидно, що для друку порожніх рядків можна використовувати таку команду:
$ awk 'NF < 0' sample_file.txtПриклад 8: Використовуйте awk для підрахунку загальної кількості рядків у файлі
Інша вбудована функція, яка називається NR, веде підрахунок кількості вхідних записів (зазвичай рядків) даного файлу. Ви можете використовувати цю функцію в awk наступним чином, щоб підрахувати кількість рядків у файлі:
$ awk 'END print NR' sample_file.txt
Це була основна інформація, яка вам потрібна для розподілу файлів за допомогою команди awk. Ви можете використовувати комбінацію цих прикладів, щоб отримати більш значущу інформацію з вашого файлу рядків через awk.