Awk

Как использовать AWK в Linux

Как использовать AWK в Linux

Утилиты, предлагаемые Linux, часто следуют философии проектирования UNIX. Любой инструмент должен быть небольшим, использовать простой текст для ввода-вывода и работать по модульному принципу. Благодаря наследию у нас есть одни из лучших функций обработки текста с помощью таких инструментов, как sed и awk.

В Linux инструмент awk предустановлен на всех дистрибутивах Linux. AWK сам по себе является языком программирования. Инструмент AWK - это просто интерпретатор языка программирования AWK. В этом руководстве вы узнаете, как использовать AWK в Linux.

Использование AWK

Инструмент AWK наиболее полезен, когда тексты организованы в предсказуемом формате. Это неплохо для синтаксического анализа и управления табличными данными. Он работает построчно со всем текстовым файлом.

По умолчанию awk использует пробелы (пробелы, табуляции и т. Д.).) для разделения полей. К счастью, многие файлы конфигурации в Linux следуют этому шаблону.

Базовый синтаксис

Так выглядит командная структура awk.

$ awk '// ; ; '

Части команды говорят сами за себя. AWK может работать без поиска или действия. Если ничего не указано, то действие по умолчанию для совпадения будет просто печатью. Обычно awk распечатывает все совпадения, найденные в файле.

Если не указан шаблон поиска, awk будет выполнять указанные действия с каждой отдельной строкой файла.

Если указаны обе части, то awk будет использовать шаблон, чтобы определить, отражает ли текущая строка его. При совпадении awk выполняет указанное действие.

Обратите внимание, что awk также может работать с перенаправленными текстами. Это может быть достигнуто путем передачи содержимого команды в awk для выполнения действий. Узнайте больше о команде Linux pipe.

Для демонстрационных целей вот образец текстового файла. Он содержит 10 строк, по 2 слова в строке.

$ cat образец.текст

Регулярное выражение

Одной из ключевых функций, которые делают awk мощным инструментом, является поддержка регулярных выражений (для краткости regex). Регулярное выражение - это строка, представляющая определенный набор символов.

Вот список некоторых наиболее распространенных синтаксисов регулярных выражений. Эти синтаксисы регулярных выражений уникальны не только для awk. Это почти универсальные синтаксисы регулярных выражений, поэтому их освоение также поможет в других приложениях / программировании, которые включают регулярное выражение.

  • Основные персонажи: Все буквенно-цифровые символы подчеркивания (_) и т. Д.
    • Набор символов: чтобы упростить задачу, в регулярном выражении есть группы символов. Например, прописные (A-Z), строчные (a-z) и числовые цифры (0-9).
  • Мета-символы: Это символы, которые объясняют различные способы расширения обычных символов.
    • Период (.): Любое совпадение символов в позиции допустимо (кроме новой строки).
    • Звездочка (*): Ноль или более существований ближайшего символа, предшествующего ему, действительны.
    • Скобка ([]): Совпадение допустимо, если в позиции совпадает любой из символов из скобки. Его можно комбинировать с наборами символов.
    • Карет (^): Матч должен быть в начале строки.
    • Доллар ($): Матч должен быть в конце строки.
    • Обратная косая черта (\): Если какой-либо метасимвол должен использоваться в буквальном смысле.

Печать текста

Чтобы распечатать все содержимое текстового файла, используйте команду печати. В случае с шаблоном поиска шаблон не определен. Итак, awk печатает все строки.

$ awk 'print' образец.текст

Здесь «print» - это команда AWK, которая печатает содержимое входных данных.

Строковый поиск

AWK может выполнять базовый текстовый поиск по заданному тексту. В разделе шаблонов должен быть текст, чтобы найти.

В следующей команде awk будет искать текст «quick» во всех строках образца файла.текст.

$ awk '/ quick /' образец.текст

Теперь давайте воспользуемся регулярными выражениями для дальнейшей настройки поиска. Следующая команда напечатает все строки с коричневым в начале.

$ awk '/ ^ коричневый /' образец.текст

Как насчет того, чтобы найти что-то в конце строки? Следующая команда напечатает все строки, в конце которых есть слово «быстро».

$ awk '/ quick $ /' образец.текст

Шаблон подстановочных знаков

В следующем примере демонстрируется использование каретки (.). Здесь могут быть любые два символа до символа «e».

$ awk '/… e /' образец.текст

Шаблон подстановки (с использованием звездочки)

Что, если на локации может быть любое количество персонажей?? Чтобы сопоставить любой возможный символ в позиции, используйте звездочку (*). Здесь AWK будет соответствовать всем строкам, которые имеют любое количество символов после «».

$ awk '/ образец * /'.текст

Выражение в скобках

В следующем примере показано, как использовать выражение в скобках. Выражение в скобках сообщает, что в данном месте совпадение будет действительным, если оно соответствует набору символов, заключенных в скобки. Например, следующая команда будет соответствовать «The» и «Tee» как действительные совпадения.

$ awk '/ T [he] e /' образец.текст

В регулярном выражении есть несколько предопределенных наборов символов. Например, набор всех прописных букв помечен как «A – Z». В следующей команде awk будет соответствовать всем словам, содержащим заглавную букву.

$ awk '/ [A-Z] /' образец.текст

Взгляните на следующее использование наборов символов с выражением в скобках.

  • [0-9]: обозначает одну цифру
  • [a-z]: обозначает одну строчную букву
  • [A-Z]: обозначает одну заглавную букву
  • [a-zA-z]: обозначает одну букву
  • [a-zA-z 0-9]: обозначает один символ или цифру.

Предварительно определенные переменные awk

AWK поставляется с набором предопределенных и автоматических переменных. Эти переменные могут упростить написание программ и скриптов с помощью AWK.

Вот некоторые из наиболее распространенных переменных AWK, с которыми вы столкнетесь.

  • ИМЯ ФАЙЛА: Имя текущего входного файла.
  • RS: Разделитель записей. Из-за природы AWK он обрабатывает данные по одной записи за раз. Здесь эта переменная определяет разделитель, используемый для разделения потока данных на записи. По умолчанию это значение - символ новой строки.
  • NR: Номер текущей входной записи. Если значение RS установлено по умолчанию, то это значение будет указывать текущий номер входной строки.
  • ФС / ОФС: Символ (символы), используемый в качестве разделителя полей. После прочтения AWK разбивает запись на разные поля. Разделитель определяется значением FS. При печати AWK объединяет все поля. Однако в настоящее время AWK использует разделитель OFS вместо разделителя FS. Как правило, и FS, и OFS одинаковы, но это не обязательно.
  • NF: Количество полей в текущей записи. Если используется значение по умолчанию «пробел», то оно будет соответствовать количеству слов в текущей записи.
  • ОРС: Разделитель записей для выходных данных. Значение по умолчанию - символ новой строки.

Давайте проверим их в действии. Следующая команда будет использовать переменную NR для печати строки 2 - строки 4 из образца.текст. AWK также поддерживает логические операторы, такие как логический и (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Чтобы присвоить конкретное значение переменной AWK, используйте следующую структуру.

$ awk '// ; ; ' знак равно,

Например, чтобы удалить все пустые строки из входного файла, измените значение RS практически на ничего. Это трюк, использующий неясное правило POSIX. Он указывает, что если значение RS является пустой строкой, то записи разделяются последовательностью, состоящей из новой строки с одной или несколькими пустыми строками. В POSIX пустая строка без содержимого полностью пуста. Однако, если строка содержит пробелы, она не считается «пустой».

$ awk 'print' RS = "образец.текст

Дополнительные ресурсы

AWK - мощный инструмент с множеством функций. Хотя это руководство охватывает многие из них, это всего лишь основы. Освоение AWK потребует большего, чем просто это. Это руководство должно стать хорошим введением в инструмент.

Если вы действительно хотите освоить этот инструмент, то вот некоторые дополнительные ресурсы, которые вам стоит изучить.

  • Обрезать пробелы
  • Использование условного оператора
  • Распечатать диапазон столбцов
  • Регулярное выражение с AWK
  • 20 примеров AWK

Интернет - отличное место, чтобы чему-то научиться. Есть много замечательных руководств по основам AWK для очень продвинутых пользователей.

Последняя мысль

Надеюсь, это руководство помогло вам хорошо понять основы AWK. Хотя это может занять некоторое время, освоение AWK чрезвычайно полезно с точки зрения мощи, которую он наделяет.

Удачных вычислений!

5 лучших аркад для Linux
В настоящее время компьютеры - это серьезные машины, используемые для игр. Если вы не можете получить новый рекорд, вы поймете, о чем я. В этом посте ...
Битва за Веснот 1.13.6 Выпущена разработка
Битва за Веснот 1.13.6, выпущенная в прошлом месяце, является шестой разработкой в ​​1.13.x и содержит ряд улучшений, в первую очередь пользовательско...
Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...