Awk

Як розділити файл рядків за допомогою Awk

Як розділити файл рядків за допомогою Awk
Команда awk Linux (скорочена від імен розробників; Aho, Weinberger та Kernighan) - чудовий спосіб обробити та проаналізувати файл рядків. Для того, щоб файли були більш інформативними, їх потрібно організувати у вигляді рядків і стовпців. Тоді ви можете використовувати awk для цих файлів, щоб:

У цій статті ми пояснимо основне використання команди 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.

OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...