Команда awk в Linux

Опубликовано admin - пн, 01/30/2023 - 16:27

В Linux команда awk используется в командной строке для обработки текста. Она позволяет выполнять действия над строками в соответствии с заданным шаблоном.

Примеры использования команды awk в Linux

Скриптовый язык awk не требует компиляции и позволяет пользователю использовать переменные, числовые функции, строковые функции и логические операторы при написании крошечных, но очень эффективных программ.

Содержание

Возможности команды awk

Утилита способна выполнять следующие операции:

  • сканирование файла построчно;
  • разбиение каждую строку ввода на поля;
  • сравнивание строки/поля ввода с образцом;
  • действия над совпавшими строками;
  • преобразование файлов данных;
  • создание форматированных отчетов;
  • форматирование строк вывода;
  • арифметические и строковые операции;
  • условные операторы и циклы. 

Синтаксис

awk '{действие}' ваш_файл.txt

Использование команды awk в Linux

Для ознакомления с использованием утилиты создаём простой текстовый файл:

oleg@mobile:~/Directory:$ touch example1.txt
oleg@mobile:~/Directory:$

 Наполняем созданный файл текстом и смотрим полученный результат:

oleg@mobile:~/Directory:$ cat example.txt 
fristName       lastName        age     city       ID

Ivan            Ivanov          28      Toronto    400
Peter           Petrov          43      Berlin     600
Sidor           Sidorov         52      Sofia      N/A
Paul            Pavlov          33      London     300
Carl            Carlson         30      Rome       N/A
oleg@mobile:~/Directory:$

В созданном файле 5 столбцов: fristName, lastName, age, city, ID.

Вывод содержимого файла

Чтобы вывода всего содержимого файла, внутри фигурных скобок следует указать действие print $0:

oleg@mobile:~/Directory:$ awk '{print $0}' example.txt 
fristName       lastName        age     city       ID

Ivan            Ivanov          28      Toronto    400
Peter           Petrov          43      Berlin     600
Sidor           Sidorov         52      Sofia      N/A
Paul            Pavlov          33      London     300
Carl            Carlson         30      Rome       N/A
oleg@mobile:~/Directory:$

Счётчик номеров строк

Для того чтобы каждая строка имела счетчик номеров строк, следует использовать встроенную переменную NR:

oleg@mobile:~/Directory:$ awk '{print NR,$0}' example.txt
1 fristName       lastName        age     city       ID
2 
3 Ivan            Ivanov          28      Toronto    400
4 Peter           Petrov          43      Berlin     600
5 Sidor           Sidorov         52      Sofia      N/A
6 Paul            Pavlov          33      London     300
7 Carl            Carlson         30      Rome       N/A
oleg@mobile:~/Directory:$ 

Вывод определённых столбцов

При использовании команды awk можно указать в выводе лишь определённые столбцы. Для примера выводим первый столбец:

oleg@mobile:~/Directory:$ awk '{print $1}' example.txt
fristName

Ivan
Peter
Sidor
Paul
Carl
oleg@mobile:~/Directory:$

 Для вывода второго столбца  используется, естественно, $2:

oleg@mobile:~/Directory:$ awk '{print $2}' example.txt
lastName

Ivanov
Petrov
Sidorov
Pavlov
Carlson
oleg@mobile:~/Directory:$

 Для вывода более одного столбца, например, первого, второго и четвертого выполняется следующее:

oleg@mobile:~/Directory:$ awk '{print $1, $2, $4}' example.txt
fristName lastName city
  
Ivan Ivanov Toronto
Peter Petrov Berlin
Sidor Sidorov Sofia
Paul Pavlov London
Carl Carlson Rome
oleg@mobile:~/Directory:$

 Для вывода последнего столбца можно использовать $NF, представляющее последнее поле в записи:

oleg@mobile:~/Directory:$ awk '{print $NF}' example.txt
ID

400
600
N/A
300
N/A
oleg@mobile:~/Directory:$

Вывод определённых строк

Можно выводить и определённые строки, например, из выбранного столбца. Для примера выводим первую строку первого столбца:

oleg@mobile:~/Directory:$ awk '{print $NF}' example.txt
ID

400
600
N/A
300
N/A
oleg@mobile:~/Directory:$

 Разберём выполненную команду. awk '{print $1}' example.txt вывела первый столбец. Затем выходные данные этой команды были переданы с помощью символа вертикальной черты | в команду head, где её аргумент -1 выбрал первую строку столбца.

Следовательно, при желании вывести две строки, например первую и вторую необходимо выполнить следующее:

oleg@mobile:~/Directory:$ awk '{print $1}' example.txt | head -2
fristName

oleg@mobile:~/Directory:$

 Обратите внимание на то, что вторая строка пробельная.

Вывод строк с определённым шаблоном

oleg@mobile:~/Directory:$ awk '/^P/' example.txt
Peter           Petrov          43      Berlin     600
Paul            Pavlov          33      London     300
oleg@mobile:~/Directory:$

 Команды выбрала в нашем файле, две строки, начинающиеся с буквы P, а символом стрелки вверх ^ было указано начало строки.

Можно также вывести строки, заканчивающиеся определённым шаблоном:

oleg@mobile:~/Directory:$ awk '/0$/' example.txt 
Ivan            Ivanov          28      Toronto    400
Peter           Petrov          43      Berlin     600
Paul            Pavlov          33      London     300
oleg@mobile:~/Directory:$

 Эту команду также можно изменить следующим образом:

oleg@mobile:~/Directory:$ awk '! /0$/' example.txt
fristName       lastName        age     city       ID

Sidor           Sidorov         52      Sofia      N/A
Carl            Carlson         30      Rome       N/A
oleg@mobile:~/Directory:$

 Теперь были выведены строки не заканчивающиеся на 0, так как символ ! используется как NOT.

Использование регулярных выражений

Для вывода слов, содержащих определённые буквы, соответствующие указанному шаблону, используется слеш /. Например, для вывода слов, содержащих Pa, выполняется следующее:

oleg@mobile:~/Directory:$ awk ' /Pa/{print $0}' examle.txt
Paul            Pavlov          33      London     300
oleg@mobile:~/Directory:$

 В выводе мы получили все строки, содержащие Pa.

Использование операторов сравнения

Для получения, например, всей информации о сотрудниках моложе 35 лет оператор сравнения используются следующим образом:

oleg@mobile:~/Directory:$ awk ' /Pa/{print $0}' examle.txt
Paul            Pavlov          33      London     300
oleg@mobile:~/Directory:$

Команда показала в выводе всех сотрудников моложе 35 лет. 

Заключение

Здесь были изложены лишь основы работы в Linux с командой awk. Теперь зная их вы сможете углублять свои навыки работы с этой очень мощной утилитой.

Поделиться с друзьями