Что такое awk linux
Обновлено: 21.11.2024
Команда awk ищет в файлах текст, содержащий шаблон. Когда строка или текст совпадают, awk выполняет определенное действие над этой строкой/текстом. Оператор Program сообщает awk, какую операцию выполнять; Оператор программы состоит из ряда «правил», где каждое правило определяет один шаблон для поиска и одно действие, которое необходимо выполнить при обнаружении определенного шаблона. Регулярное выражение, заключенное в косую черту (/), представляет собой шаблон awk для соответствия каждой входной записи, текст которой принадлежит этому набору.
ВАРИАНТЫ
Тег | Описание |
---|---|
-F FS --field-separator FS | Используйте FS в качестве разделителя полей ввода (значение предопределенной переменной 'FS'). |
-f PROGRAM-FILE --file PROGRAM-FILE | Читать исходный код программы awk из файла PROGRAM-FILE, а не из первого аргумента командной строки. |
-mf NNN -mr NNN | Флаг 'f' устанавливает максимальное количество полей, а флаг 'r' устанавливает максимальный размер записи. Эти параметры игнорируются gawk, так как gawk не имеет предопределенных ограничений; они предназначены только для совместимости с исследовательской версией Unix awk, разработанной Bell Labs. |
-v VAR=VAL --assign VAR=VAL | Присвоить переменной VAR значение VAL перед началом выполнения программы. |
-W традиционная -W compat --традиционная -- compat | Использовать режим совместимости, в котором расширения gawk отключены. |
-W lint --lint | Предупреждать о сомнительных или непереносимых конструкциях awk. |
-W lint-old --lint-old | Предупреждать о конструкциях, недоступных в исходной версии awk версии 7 для Unix. |
-W posix --posix | Использовать совместимость с POSIX режим, в котором расширения 'gawk' отключены и применяются дополнительные ограничения. |
-W re-interval --re-interval | Разрешить интервальные выражения в регулярных выражениях. |
-W source=PROGRAM-TEXT --source PROGRAM-TEXT | Использовать PROGRAM-TEXT как исходный код программы awk. Эта опция позволяет смешивать исходный код командной строки с исходным кодом из файлов и особенно полезна для смешивания программ командной строки с библиотечными функциями. |
-- | Сигнал об окончании опций. Это полезно, чтобы позволить дальнейшим аргументам самой awk-программы начинаться с '-'. В основном это сделано для обеспечения согласованности с соглашениями об анализе аргументов POSIX. |
'Программа' | Серия шаблонов и действий | Input-File | Если Input-File не указан, то awk применяет Программу к «стандартному вводу» (конвейерному выводу какой-либо другой команды или терминала. Типизированный ввод будет продолжаться до конца -of-file (набрав 'Control-d') |
ПРИМЕРЫ
Чтобы вернуть второй элемент ($2) из каждой строки вывода из списка ls - l.
Дэйв Маккей
Дэйв Маккей
Писатель
Фатмавати Ахмад Заэнури/Shutterstock
В Linux awk представляет собой динамо-машину для работы с текстом из командной строки, а также мощный язык сценариев. Вот введение в некоторые из его самых интересных функций.
Как awk получил свое название
Команда awk была названа с использованием инициалов трех человек, написавших исходную версию в 1977 году: Альфреда Ахо, Питера Вайнбергера и Брайана Кернигана. Эти трое принадлежали к легендарному пантеону Unix AT&T Bell Laboratories. С тех пор, благодаря вкладу многих других, awk продолжал развиваться.
Это полноценный язык сценариев, а также полный набор инструментов для работы с текстом в командной строке. Если эта статья разожжет ваш аппетит, вы можете ознакомиться со всеми подробностями о awk и его функциях.
Правила, шаблоны и действия
awk работает с программами, содержащими правила, состоящие из шаблонов и действий. Действие выполняется над текстом, соответствующим шаблону. Шаблоны заключены в фигурные скобки (<>). Вместе шаблон и действие образуют правило. Вся программа awk заключена в одинарные кавычки ( ' ).
Давайте рассмотрим самый простой тип программы awk. У него нет шаблона, поэтому он соответствует каждой строке введенного в него текста. Это означает, что действие выполняется в каждой строке. Мы будем использовать его в выводе команды who.
Вот стандартный вывод who :
Возможно, нам не нужна вся эта информация, мы просто хотим увидеть имена в учетных записях. Мы можем направить вывод who в awk, а затем указать awk напечатать только первое поле.
По умолчанию awk считает полем строку символов, окруженную пробелами, начало строки или конец строки. Поля обозначаются знаком доллара ($) и номером. Таким образом, $1 представляет собой первое поле, которое мы будем использовать с действием печати для печати первого поля.
Вводим следующее:
awk печатает первое поле и отбрасывает остальную часть строки.
Мы можем напечатать столько полей, сколько захотим. Если мы добавим запятую в качестве разделителя, awk напечатает пробел между каждым полем.
Мы вводим следующее, чтобы также напечатать время, когда человек вошел в систему (четвертое поле):
Есть несколько специальных идентификаторов полей. Они представляют всю строку текста и последнее поле в строке текста:
- $0: представляет всю строку текста.
- $1: представляет первое поле.
- $2: представляет второе поле.
- $7: представляет седьмое поле.
- $45: представляет 45-е поле.
- $NF: обозначает "количество полей" и представляет последнее поле.
Мы введем следующее, чтобы открыть небольшой текстовый файл, содержащий короткую цитату, приписываемую Деннису Ритчи:
Мы хотим, чтобы awk печатал первое, второе и последнее поле цитаты. Обратите внимание: несмотря на то, что в окне терминала оно обрамлено, это всего лишь одна строка текста.
Вводим следующую команду:
Мы не знаем этой «простоты». является 18-м полем в строке текста, и нам все равно. Что мы знаем, так это то, что это последнее поле, и мы можем использовать $NF, чтобы получить его значение. Точка считается просто еще одним символом в теле поля.
Добавление разделителей полей вывода
Вы также можете указать awk печатать определенный символ между полями вместо стандартного пробела. Вывод команды date по умолчанию несколько своеобразен, потому что время находится прямо посередине. Однако мы можем ввести следующее и использовать awk для извлечения нужных полей:
Мы будем использовать переменную OFS (разделитель полей вывода), чтобы поместить разделитель между месяцем, днем и годом. Обратите внимание, что ниже мы заключаем команду в одинарные кавычки ( ' ), а не в фигурные скобки ( <> ):
Правила НАЧАЛА и КОНЦА
Правило BEGIN выполняется один раз перед началом любой обработки текста. Фактически, он выполняется еще до того, как awk прочитает какой-либо текст. Правило END выполняется после завершения всей обработки. У вас может быть несколько правил BEGIN и END, и они будут выполняться по порядку.
Для нашего примера правила BEGIN мы напечатаем всю цитату из файла dennis_ritchie.txt, который мы использовали ранее, с заголовком над ней.
Для этого мы вводим эту команду:
Обратите внимание, что правило BEGIN имеет собственный набор действий, заключенных в собственный набор фигурных скобок ( <> ).
Мы можем использовать ту же технику с командой, которую использовали ранее, для передачи вывода от who в awk . Для этого набираем следующее:
Введите разделители полей
Если вы хотите, чтобы awk работал с текстом, в котором не используются пробелы для разделения полей, вы должны сообщить ему, какой символ используется в тексте в качестве разделителя полей. Например, файл /etc/passwd использует двоеточие ( : ) для разделения полей.
Мы будем использовать этот файл и параметр -F (строка-разделитель), чтобы указать awk использовать двоеточие ( : ) в качестве разделителя. Мы вводим следующее, чтобы заставить awk напечатать имя учетной записи пользователя и домашнюю папку:
Вывод содержит имя учетной записи пользователя (или имя приложения или демона) и домашнюю папку (или расположение приложения).
Добавление шаблонов
Если нас интересуют только учетные записи обычных пользователей, мы можем включить шаблон в наше действие печати, чтобы отфильтровать все остальные записи. Поскольку количество идентификаторов пользователей больше или равно 1000, мы можем основывать наш фильтр на этой информации.
Мы вводим следующее, чтобы выполнить наше действие печати только тогда, когда третье поле ( $3 ) содержит значение 1000 или больше:
Шаблон должен непосредственно предшествовать действию, с которым он связан.
Мы можем использовать правило BEGIN, чтобы указать заголовок для нашего небольшого отчета. Мы вводим следующее, используя нотацию ( \n ), чтобы вставить символ новой строки в строку заголовка:
Шаблоны — это полноценные регулярные выражения, и они — одно из достоинств awk.
Допустим, мы хотим увидеть универсальные уникальные идентификаторы (UUID) смонтированных файловых систем. Если мы ищем в файле /etc/fstab вхождения строки «UUID», он должен вернуть нам эту информацию.
Мы используем шаблон поиска «/UUID/» в нашей команде:
Он находит все вхождения «UUID» и печатает эти строки. На самом деле мы получили бы тот же результат без действия печати, потому что действие по умолчанию печатает всю строку текста. Однако для ясности часто бывает полезно быть явным. Когда вы просматриваете сценарий или свой файл истории, вы будете рады, что оставили подсказки для себя.
Первая найденная строка была строкой комментария, и хотя строка «UUID» находится в середине, awk все же нашел ее. Мы можем настроить регулярное выражение и указать awk обрабатывать только строки, начинающиеся с «UUID». Для этого мы вводим следующее, которое включает токен начала строки ( ^ ):
Так лучше! Теперь мы видим только подлинные инструкции по монтированию. Чтобы еще больше уточнить вывод, мы вводим следующее и ограничиваем отображение первым полем:
Если бы на этой машине было смонтировано несколько файловых систем, мы бы получили четкую таблицу их UUID.
Встроенные функции
awk имеет множество функций, которые вы можете вызывать и использовать в своих программах как из командной строки, так и в скриптах. Если вы немного покопаетесь, вы обнаружите, что это очень плодотворно.
Чтобы продемонстрировать общую технику вызова функции, мы рассмотрим некоторые числовые. Например, следующий код выводит квадратный корень из 625:
Эта команда печатает арктангенс 0 (ноль) и -1 (который является математической константой пи):
В следующей команде мы изменяем результат функции atan2() перед его печатью:
Функции могут принимать выражения в качестве параметров. Например, вот замысловатый способ получить квадратный корень из 25:
awk-скрипты
Если ваша командная строка усложняется или вы разрабатываете процедуру, которую, как вы знаете, захотите использовать снова, вы можете перенести свою awk-команду в скрипт.
В нашем примере скрипта мы собираемся сделать все следующее:
- Сообщите оболочке, какой исполняемый файл использовать для запуска скрипта.
- Подготовьте awk к использованию переменной разделителя полей FS для чтения входного текста с полями, разделенными двоеточиями ( : ).
- Используйте разделитель выходных полей OFS, чтобы указать awk использовать двоеточие ( : ) для разделения полей в выходных данных.
- Установите счетчик на 0 (ноль).
- Установите во втором поле каждой строки текста пустое значение (это всегда «x», поэтому нам не нужно его видеть).
- Выведите строку с измененным вторым полем.
- Увеличить значение счетчика.
- Выведите значение счетчика.
Наш скрипт показан ниже.
Правило BEGIN выполняет подготовительные шаги, а правило END отображает значение счетчика. Среднее правило (у которого нет ни имени, ни шаблона, поэтому оно соответствует каждой строке) изменяет второе поле, печатает строку и увеличивает счетчик.
Первая строка скрипта сообщает оболочке, какой исполняемый файл использовать (в нашем примере awk) для запуска скрипта. Он также передает параметр -f (имя файла) в awk, который информирует его о том, что текст, который он будет обрабатывать, будет получен из файла. Мы передадим имя файла сценарию при его запуске.
Мы включили приведенный ниже сценарий в виде текста, чтобы вы могли вырезать и вставлять его:
Сохраните это в файле с именем omit.awk . Чтобы сделать скрипт исполняемым, мы набираем с помощью chmod следующее:
Теперь мы запустим его и передадим скрипту файл /etc/passwd. Это файл, который awk обработает для нас, используя правила внутри скрипта:
Файл обрабатывается, и каждая строка отображается, как показано ниже.
Записи «x» во втором поле были удалены, но обратите внимание, что разделители полей все еще присутствуют. Строки подсчитываются, а общее количество указывается внизу вывода.
awk не означает неловкость
awk не означает неуклюжий; это означает элегантность. Его описывают как фильтр обработки и генератор отчетов. Точнее, это и то, и другое, или, точнее, инструмент, который вы можете использовать для обеих этих задач. Всего за несколько строк awk выполняет то, что требует обширного программирования на традиционном языке.
Эта мощь обеспечивается простой концепцией правил, содержащих шаблоны, которые выбирают текст для обработки, и действия, определяющие обработку.
Команды Linux | |
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm |
Процессы | alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
- › Как использовать команду whois в Linux
- › Что означает XD и как вы его используете?
- › Как установить Google Play Маркет в Windows 11
- ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
- › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
- › Почему прозрачные чехлы для телефонов желтеют?
- › Как восстановить метки панели задач в Windows 11
Awk – это язык сценариев, используемый для обработки данных и создания отчетов. Командный язык программирования awk не требует компиляции и позволяет пользователю использовать переменные, числовые функции, строковые функции и логические операторы.
Awk – это утилита, которая позволяет программисту писать крошечные, но эффективные программы в виде операторов, определяющих текстовые шаблоны, которые необходимо искать в каждой строке документа, и действия, которые необходимо предпринять при обнаружении совпадения. найти в строке. Awk в основном используется для сканирования и обработки шаблонов. Он ищет один или несколько файлов, чтобы увидеть, содержат ли они строки, соответствующие указанным шаблонам, а затем выполняет соответствующие действия.
Awk – это сокращение от имен разработчиков – Ахо, Вайнбергера и Кернигана.
ЧТО МОЖНО СДЕЛАТЬ С AWK?
<р>1. Операции AWK:(a) Сканирует файл построчно,
(b) Разбивает каждую строку ввода на поля,
(c) Сравнивает строку/поля ввода с образцом
(d) Выполняет действия над совпавшими строками <р>2. Полезен для:
(а) преобразования файлов данных
(б) создания форматированных отчетов <р>3. Конструкции программирования:
(a) форматирование выходных строк,
(b) арифметические и строковые операции,
(c) условные операторы и циклы
Синтаксис:
Параметры:
Примеры команд
Пример:
Рассмотрите следующий текстовый файл как входной файл для всех случаев ниже:
<р>1. Поведение Awk по умолчанию: по умолчанию Awk печатает каждую строку данных из указанного файла.Вывод:
В приведенном выше примере шаблон не указан. Таким образом, действия применимы ко всем линиям.Действие print без каких-либо аргументов по умолчанию печатает всю строку, поэтому все строки файла печатаются без сбоев.
<р>2. Выведите строки, соответствующие заданному шаблону.Вывод:
В приведенном выше примере команда awk выводит всю строку, совпадающую с «менеджером».
<р>3. Разделение строки на поля: для каждой записи, т.е. строки, команда awk по умолчанию разделяет запись, разделенную пробельным символом, и сохраняет ее в переменных $n. Если в строке 4 слова, они будут храниться в $1, $2, $3 и $4 соответственно. Кроме того, $0 представляет всю строку.Вывод:
В приведенном выше примере $1 и $4 представляют поля Имя и Зарплата соответственно.
Встроенные переменные в Awk
- NR: команда NR ведет текущий подсчет количества входных записей. Помните, что записи обычно представляют собой строки. Команда Awk выполняет операторы шаблона/действия один раз для каждой записи в файле.
- NF: команда NF подсчитывает количество полей в текущей входной записи.
- FS: команда FS содержит символ-разделитель полей, который используется для разделения полей в строке ввода. По умолчанию используется «пробел», что означает пробел и символы табуляции. FS можно переназначить другому символу (обычно в BEGIN), чтобы изменить разделитель полей.
- RS: Команда RS сохраняет текущий символ разделителя записи. Поскольку по умолчанию входная строка является входной записью, разделителем записей по умолчанию является символ новой строки.
- OFS: команда OFS сохраняет разделитель полей вывода, который разделяет поля, когда Awk печатает их. По умолчанию это пустое место. Всякий раз, когда print имеет несколько параметров, разделенных запятыми, между каждым параметром будет напечатано значение OFS.
- ORS: Команда ORS сохраняет разделитель выходных записей, который разделяет строки вывода, когда Awk печатает их. По умолчанию используется символ новой строки. print автоматически выводит содержимое ORS в конце всего, что было передано для печати.
Примеры:
Использование встроенных переменных NR (отображаемый номер строки)
Вывод:
В приведенном выше примере команда awk с NR печатает все строки вместе с номером строки.
Использование встроенных переменных NF (отображать последнее поле)
Вывод:
В приведенном выше примере $1 – это имя, а $NF – зарплата. Мы можем получить зарплату, используя $NF , где $NF представляет последнее поле.
Другое использование встроенных переменных NR (строка отображения с 3 по 6)
Вывод:
Больше примеров
Для данного текстового файла:
1) Чтобы напечатать первый элемент вместе с номером строки (NR), разделенным "-", в каждой строке в geeksforgeeks.txt:
2) Чтобы вернуть вторую строку/элемент из geeksforgeeks.txt:
Вопрос должен быть таким: Чтобы вернуть второй столбец/элемент из geeksforgeeks.txt:
3) Чтобы напечатать любую непустую строку, если она есть
Здесь NF должен быть не меньше 0, и пользователь также должен напечатать номер строки:
Команда awk — это инструмент Linux и язык программирования, который позволяет пользователям обрабатывать и манипулировать данными, а также создавать форматированные отчеты. Инструмент поддерживает различные операции для расширенной обработки текста и упрощает выбор сложных данных.
В этом руководстве вы узнаете, что делает команда awk и как ее использовать.
- Система под управлением Linux.
- Доступ к окну терминала.
Синтаксис команды AWK
Синтаксис команды awk:
Вывод показывает строки, в которых существуют дубликаты, и указывает Нет дубликатов, если в строке нет повторяющихся ответов.
Инструкция while многократно выполняет целевую инструкцию, пока заданное условие истинно. Это означает, что он работает так же, как в языке программирования C. Если условие истинно, выполняется тело цикла. Если условие ложно, awk продолжает выполнение.
Например, следующий оператор указывает awk печатать все поля ввода по одному в строке:
Операция for также работает так же, как и в C, позволяя пользователям создавать циклы, которые необходимо выполнить определенное количество раз.
Представленный выше оператор увеличивает значение i на единицу, пока оно не достигнет десяти, и каждый раз вычисляет квадрат i.
Примечание. Выражения в условной части if , while или for могут включать операторы отношения, такие как =, == (равно) и != (не равно). Выражения также могут включать совпадения регулярных выражений с операторами сопоставления ∼ и !∼ , логическими операторами ||, && и ! . Операторы сгруппированы в круглые скобки.
Операция break немедленно завершает работу с оператором while или for . Чтобы начать следующую итерацию, используйте оператор continue.
Следующий оператор указывает awk перейти к следующей записи и начать поиск шаблонов сверху. Оператор выхода сообщает awk, что ввод завершен.
Ниже приведен пример оператора break:
Приведенная выше команда разрывает цикл после 5 итераций.
Шаблоны AWK
Вставка шаблона перед действием в awk действует как селектор. Селектор определяет, выполнять действие или нет. В качестве шаблонов могут служить следующие выражения:
- Регулярные выражения.
- Арифметические выражения отношения.
- Выражения со строковым значением.
- Произвольные логические комбинации приведенных выше выражений.
В следующих разделах объясняются вышеупомянутые выражения и способы их использования.
Примечание. Узнайте, как искать строки или шаблоны с помощью команды grep.
Шаблоны регулярных выражений
Шаблоны регулярных выражений — это простейшая форма выражений, содержащих строку символов, заключенную в косую черту. Это может быть последовательность букв, цифр или их комбинация.
В следующем примере программа выводит все строки, начинающиеся с "A". Если указанная строка является частью большего слова, она также печатается.
Шаблоны реляционных выражений
Другим типом шаблонов awk являются реляционные шаблоны выражений. Шаблоны реляционных выражений включают использование любого из следующих реляционных операторов: = и >.
Ниже приведен пример реляционного выражения awk:
Шаблоны диапазонов
Шаблон диапазона – это шаблон, состоящий из двух шаблонов, разделенных запятой. Шаблоны диапазона выполняют указанное действие для каждой строки между появлением шаблона один и шаблона два.
Приведенный выше шаблон указывает awk напечатать все строки ввода, содержащие ключевые слова "клерк" и "менеджер".
Шаблоны специальных выражений
К шаблонам специальных выражений относятся BEGIN и END, обозначающие инициализацию и завершение программы. Шаблон BEGIN соответствует началу ввода до обработки первой записи. Шаблон END соответствует концу ввода после обработки последней записи.
Например, вы можете указать awk отображать сообщение в начале и в конце процесса:
Сочетание шаблонов
На выходе выводятся первое и второе поля тех записей, у которых третье поле больше десяти, а четвертое поле меньше 20.
Переменные AWK
Команда awk имеет встроенные переменные полей, которые разбивают входной файл на отдельные части, называемые полями. awk присваивает каждому полю данных следующие переменные:
- $0 . Используется для указания всей строки.
- $1 . Задает первое поле.
- $2 . Задает второе поле.
- и т. д.
- НР . Подсчитывает количество входных записей (обычно строк). Команда awk выполняет операторы шаблона/действия один раз для каждой записи в файле.
Команда отображает номер строки в выводе.
- НФ . Подсчитывает количество полей в текущей входной записи и отображает последнее поле файла.
- ФС . Содержит символ, используемый для разделения полей в строке ввода. Разделителем по умолчанию является пробел, но вы можете использовать FS, чтобы переназначить разделитель другому символу (обычно в BEGIN ).
Например, вы можете сделать файл etc/passwd (список пользователей) более удобочитаемым, изменив разделитель с двоеточия ( : ) на дефис ( / ) и распечатав разделитель полей как хорошо:
- РС . Сохраняет текущий символ разделителя записи. Строка ввода по умолчанию — это входная запись, что делает новую строку разделителем записей по умолчанию. Команда полезна, если входные данные представляют собой файл с разделителями-запятыми (CSV).
Примечание. Сначала мы использовали команду cat, чтобы отобразить содержимое файла, а затем отформатировали вывод с помощью AWK.
- ОФС . Сохраняет разделитель полей вывода, который разделяет поля при печати. Разделителем по умолчанию является пробел. Всякий раз, когда в распечатываемом файле есть несколько параметров, разделенных запятыми, значение OFS печатается между каждым параметром.
Действия AWK
Инструмент awk следует правилам, содержащим пары шаблон-действие. Действия состоят из операторов, заключенных в фигурные скобки <>, которые содержат выражения, управляющие операторы, составные операторы, операторы ввода и вывода и операторы удаления. Эти утверждения описаны в разделах выше.
Создайте скрипт awk, используя следующий синтаксис:
Эта простая команда указывает awk печатать указанную строку каждый раз, когда вы запускаете команду. Завершите программу, нажав Ctrl+D.
Как использовать команду AWK — примеры
Помимо обработки данных и создания форматированных выходных данных, awk имеет и другие применения, поскольку это язык сценариев, а не только команда обработки текста. В этом разделе объясняются альтернативные варианты использования awk .
- Расчеты. Команда awk позволяет выполнять арифметические вычисления. Например:
В этом примере мы передаем команду df и используем информацию, сгенерированную в отчете, для расчета общего объема памяти, доступной и используемой смонтированными файловыми системами, которые содержат только /dev и / петля в названии.
Созданный отчет показывает сумму памяти файловых систем /dev и /loop во втором и третьем столбцах вывода df.
- Фильтрация. Команда awk позволяет фильтровать вывод, ограничивая длину строк. Например:
В этом примере мы запустили системный файл /etc/shells через awk и отфильтровали вывод, чтобы он содержал только строки, содержащие более 8 символов.
- Мониторинг. Проверьте, запущен ли определенный процесс в Linux, введя команду ps. Например:
В результате выводится список всех процессов, запущенных на вашем компьютере, причем последнее поле соответствует указанному шаблону.
- Подсчет. Вы можете использовать awk для подсчета количества символов в строке и получения числа, напечатанного в результате.Например:
awk '< print "Количество символов в строке", NR," wp-block-image">
После прочтения этого руководства вы узнаете, что такое команда awk и как ее эффективно использовать в различных случаях.
Команда awk также является многофункциональным языком сценариев, и каждый пользователь Linux должен знать ее. Используйте его для мощных операций с текстом, а также в качестве языка сценариев.
Дионисия Лемонаки
В этом руководстве для начинающих вы изучите самые основы команды awk. Вы также увидите, как его можно использовать при работе с текстом.
Начнем!
Что такое команда awk?
awk — это язык сценариев, который удобен при работе в командной строке. Это также широко используемая команда для обработки текста.
При использовании awk вы можете выбирать данные — один или несколько фрагментов отдельного текста — на основе предоставленного шаблона.
Например, некоторые из операций, которые вы можете выполнять с помощью awk, включают поиск определенного слова или шаблона в заданном фрагменте текста или даже выбор определенной строки или определенного столбца в предоставленном вами файле.
Основной синтаксис команды awk
В своей простейшей форме за командой awk следует набор одинарных кавычек и набор фигурных скобок с именем файла, который вы хотите найти, среди упомянутых последним.
Это выглядит примерно так:
Если вы хотите найти текст с определенным шаблоном или ищете определенное слово в тексте, команда будет выглядеть примерно так:
Как создать образец файла
Чтобы создать файл в командной строке, используйте команду touch.
Например: коснитесь имя_файла.txt, где имя_файла — это имя вашего файла.
Затем вы можете использовать команду открытия ( open filename.txt ), и программа текстового процессора, такая как TextEdit, откроется, где вы сможете добавить содержимое файла.
Итак, допустим, у вас есть текстовый файл information.txt, содержащий данные, разделенные на разные столбцы.
Содержимое файла может выглядеть примерно так:
В моем примере есть один столбец для firstName , lastName , age , city и ID .
В любое время вы можете просмотреть вывод содержимого вашего файла, введя cat text_file , где text_file — это имя вашего файла.
Как распечатать все содержимое файла с помощью awk
Чтобы напечатать все содержимое файла, нужно указать внутри фигурных скобок действие print $0 .
Это будет работать точно так же, как команда cat, упомянутая ранее.
Если вы хотите, чтобы каждая строка имела счетчик номеров строк, вы должны использовать встроенную переменную NR:
Как распечатать определенные столбцы с помощью awk
При использовании awk вы можете указать определенные столбцы, которые хотите напечатать.
Чтобы напечатать первый столбец, используйте команду:
$1 обозначает первое поле, в данном случае первый столбец.
Чтобы напечатать второй столбец, используйте $2 :
По умолчанию awk определяет, где каждый столбец начинается и заканчивается пробелом.
Чтобы напечатать несколько столбцов, например первый и четвертый столбцы, выполните следующие действия:
$1 представляет первое поле ввода (первый столбец), а $4 — четвертое. Вы разделяете их запятой $1,$4 , чтобы вывод был с пробелом и был более удобочитаемым.
Чтобы напечатать последнее поле (последний столбец), вы также можете использовать $NF, который представляет последнее поле в записи:
Как напечатать определенные строки столбца
Вы также можете указать строку, которую хотите напечатать из выбранного столбца:
Давайте разберем эту команду. awk '' information.txt печатает первый столбец. Затем вывод этой команды (которую вы видели ранее) передается по конвейеру с использованием символа вертикальной черты | , в команду head, где аргумент -1 выбирает первую строку столбца.
Если вы хотите напечатать две строки, сделайте следующее:
Как распечатать строки с определенным шаблоном в awk
Вы можете напечатать строку, начинающуюся с определенной буквы.
Эта команда выбирает любую строку с текстом, который начинается с буквы O .
Сначала вы используете символ стрелки вверх ( ^ ), который указывает начало строки, а затем букву, с которой вы хотите, чтобы строка начиналась.
Вы также можете напечатать строку, заканчивающуюся определенным шаблоном:
Это распечатывает строки, которые заканчиваются на 0 — символ $ используется после символа, чтобы обозначить конец строки.
Эта команда также может быть изменена на:
! используется как NOT , поэтому в этом случае выбираются строки, которые НЕ заканчиваются на 0 .
Как использовать регулярные выражения в awk
Чтобы вывести слова, содержащие определенные буквы, и распечатать слова, соответствующие заданному шаблону, вы снова используете косую черту // , показанную ранее.
Если вы хотите найти слова, содержащие on , выполните следующие действия:
Это соответствует всем записям, содержащим io .
Скажем, у вас есть дополнительный столбец — столбец отдела:
Чтобы найти всю информацию о людях, работающих в сфере ИТ , необходимо указать искомую строку между косой чертой // :
Что делать, если вы хотите видеть только имена и фамилии людей, работающих в сфере ИТ?
Вы можете указать столбец следующим образом:
При этом будут отображаться только первый и второй столбцы, в которых есть ИТ, а не все поля.
При поиске слов по определенному образцу могут возникнуть ситуации, когда вам потребуется использовать escape-символ, например:
Я хотел найти строки, оканчивающиеся шаблоном N/A .
Итак, при поиске между ' // ', как показано выше, мне пришлось использовать escape-символ ( \ ) между N/A , иначе я бы получил ошибку.
Как использовать операторы сравнения в awk
Если, например, вы хотите найти всю информацию о сотрудниках моложе 40 лет, вы должны использовать оператор сравнения следующим образом:
Вывод показывает информацию только о людях моложе 40 лет.
Заключение
И вот оно! Теперь вы знаете абсолютные основы работы с awk и работы с текстовыми данными.
Чтобы узнать больше о Linux, на freeCodeCamp есть множество доступных учебных материалов.
Читайте также: