ГлавнаяОперационные системыLinuxНачало работы с командой Awk

Начало работы с командой Awk

Awk — мощный язык программирования обработки данных, встроенный почти в каждую *nix-систему. На первый взгляд он выглядит как язык программирования общего назначения, но он создан для приема входных данных и выполнения действий на основе этих входных данных. Если вам нужно обработать текст на основе определенных условий, awk почти всегда выполнит эту работу быстрее, чем язык общего назначения, такой как C. Он также интерпретируется, поэтому вы избегаете длительного процесса компиляции и отладки скомпилированных языков.

Еще один интересный факт : странное имя программы представляет собой инициализм имен ее программистов: Альфред А хо, Питер Вайнбергер и Брайан К ерниган

Основной синтаксис Awk

При вызове из командной строки awk следует следующему базовому шаблону:

pattern { action } file
pattern { action } file
...

Awk будет выполнять действие всякий раз, когда шаблон соответствует указанному файлу. Если вы не укажете файл, awk будет работать на стандартном выходе. При сопоставлении шаблонов awk может принимать как регулярные выражения, так и программный ввод. Давайте рассмотрим этот базовый пример ни

Основной синтаксис Awk

pan> '/com/ { print $0 }' emails

awk-команда-начало-1

Эта однострочная программа распечатает каждую строку из файла «emails», содержащую символы com. В awk $0относится к текущей строке, что также является поведением по умолчанию. Эту строку можно было бы написать без $0,, и она бы работала точно так же.

Печать полей

Поскольку awk может идентифицировать и анализировать разделители полей, он полезен для печати определенных столбцов или строк данных. В этом примере мы будем использовать файл «/etc/passwd».

awk -F":" '{ print $1 }' /etc/passwd

awk-команда-начало-2

Эта однострочная программа делает несколько вещей. Флаг -Fуказывает, что следующий символ (в данном примере :) следует интерпретировать как разделитель полей. Awk печатает первое поле, указанное $1.

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

awk -F":" '{ print $4 " " $5}' /etc/passw

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

awk-команда-начало-4

При этом четвер

Печать полей

а passwdбудут распечатаны с пробелом между ними. Обратите внимание, что пробел находится между двойными кавычками. Это определяет его как буквальный символ в команде печати, поэтому он печатается так, как написано. Мы также можем добавить более сложные литералы, чтобы очистить вывод:

awk -F":" '{ print "process: " $5 "\t\t " "directory: "$6}' /etc/passwd

awk-команда-начало-5

Вывод будет распечатан с этикетками для идентификации. И мы можем вывести все это в новый файл с помощью курсора (>).

awk -F":" '{ print "process: " $5 "\t\t " "directory: "$6}' /etc/passwd > processes.txt

Мы можем объединить все, что мы знаем, для более широкой обработки данных. Например, мы можем использовать регулярные выражения для печати всех строк документа, содержащего действительный номер телефона в США.

awk '/^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/ { print }' contacts

Расширение возможностей сопоставления команды Awk

Awk также может обрабатывать информацию, используя различные операнды. Сюда входят стандартные операнды, такие как ==, <, >, <=, >=, и !=, а также специфичные для awk операнды ~и !~,, которые означают «совпадает» и «не соответствует» соответственно. Эти операнды используются при сравнении регулярных выражений с булевой логикой, а также с более стандартными программными фразами.

Примеры команд Awk

awk 'length($0) > 80' data

Печатает все строки длиной более восьмидесяти символов в файле data. Обратите внимание на отсутствие оператора печати: при отсутствии указанного действия awk будет печатать всю строку всякий раз, когда шаблон соответствует.

$1 == "user" { print }

Печатает все строки, где первое поле равно строке «пользователь». Без флага -Fawk будет использовать пробел в качестве разделителя полей по умолчанию. Также обратите внимание, что awk и файл не указаны. Это предназначено для использования в сценариях в отдельных файлах, как описано ниже.

$5 ~ /root/ { print $3 }

Печатает третье поле всякий раз, когда пятое поле соответствует регулярному выражению /root/.

{ 
  if ( $5 !~ /root/ ) { 
          print $3 
  } 
}

Если поле 5 не соответствует /root/, напечатайте третье поле. При этом используется оператор ifв стиле C, который также совместим с awk. Этот формат обеспечивает большую гибкость для программистов, знакомых с языками общего назначения.

Сохранение скриптов в файлах

Сценарии Awk также можно сохранять в файлах, которые позволяют сохранять

Расширение возможностей сопоставления команды Awk

-f ~/scripts/program.awk data

При использовании флага -fawk запускает сценарий по указанному пути к файлу, а именно program.awk. Команды этой программы будут обрабатывать файл «данные».

Действия также можно запускать до и после программы, используя BEGINи END:

BEGIN { FS=":" } # indicates that : is the field separator for the program.
 
#operations
 
END   { print "You're done" } # prints a joyful message for the user

Как видно выше, символ #начинает комментарий, который длится до конца строки.

Заключение

Это

Примеры команд Awk

лько самые основные элементы awk. Помимо этого, еще многое предстоит построить и изучить. Изучите Документация GNU для awk или Язык программирования Awk и учебник awk, написанный разработчиками программы.

Сохранение скриптов в файлах

Заключение

ПОХОЖИЕ СТАТЬИ

Популярные записи