Awk

Как да използвам AWK на Linux

Как да използвам AWK на Linux

Помощните програми, които Linux предлагат, често следват UNIX философията на дизайна. Всеки инструмент трябва да е малък, да използва обикновен текст за I / O и да работи по модулен начин. Благодарение на наследството имаме едни от най-добрите функционалности за обработка на текст с помощта на инструменти като sed и awk.

В Linux инструментът awk се предлага предварително инсталиран на всички дистрибуции на Linux. Самият AWK е език за програмиране. Инструментът AWK е просто интерпретатор на езика за програмиране AWK. В това ръководство проверете как да използвате AWK на Linux.

Използване на AWK

Инструментът AWK е най-полезен, когато текстовете са организирани в предвидим формат. Доста е добър при разбор и манипулиране на таблични данни. Той работи на ред по ред, върху целия текстов файл.

Поведението по подразбиране на awk е да използва бели пространства (интервали, раздели и т.н.) за разделяне на полета. За щастие, много от конфигурационните файлове в Linux следват този модел.

Основен синтаксис

Ето как изглежда командната структура на awk.

$ awk '// ; ; '

Частите на командата са напълно обясними. Awk може да работи без частта за търсене или действие. Ако не е посочено нищо, тогава действието по подразбиране за съвпадението ще бъде просто отпечатване. По принцип awk ще отпечата всички съвпадения, намерени във файла.

Ако няма посочен шаблон за търсене, тогава awk ще извърши посочените действия на всеки отделен ред от файла.

Ако са дадени и двете части, awk ще използва шаблона, за да определи дали текущият ред го отразява. Ако съвпада, awk изпълнява посоченото действие.

Имайте предвид, че awk може да работи и върху пренасочени текстове. Това може да се постигне чрез изкарване на съдържанието на командата, за да се въздейства. Научете повече за командата Linux pipe.

За демонстрационни цели ето примерен текстов файл. Съдържа 10 реда, по 2 думи на ред.

$ проба за котка.текст

Редовен израз

Една от ключовите характеристики, които правят awk мощен инструмент, е поддръжката на регулярен израз (кратко изразено изражение). Регулярният израз е низ, който представлява определен модел от символи.

Ето списък на някои от най-често срещаните синтаксиси на регулярни изрази. Тези синтаксиси на регулярни изрази не са уникални само за awk. Това са почти универсални синтаксиси на регулярни изрази, така че овладяването им също ще помогне в други приложения / програми, които включват регулярни изрази.

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

Печат на текста

За да отпечатате цялото съдържание на текстов файл, използвайте командата print. В случая на шаблона за търсене няма определен шаблон. И така, awk отпечатва всички редове.

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

Тук „print“ е команда AWK, която отпечатва съдържанието на входа.

Търсене на низ

AWK може да извърши основно търсене на текст върху дадения текст. В раздела за шаблони трябва да е текстът, за да се намери.

В следващата команда awk ще търси текста „бързо“ във всички редове на примерната програма.текст.

$ 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 стойността е зададена по подразбиране, тогава тази стойност ще показва текущия номер на входния ред.
  • FS / OFS: Символът (ите), използван (и) като разделител на полето. След като бъде прочетен, 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 ще отнеме повече от това. Това ръководство трябва да е хубаво въведение в инструмента.

Ако наистина искате да овладеете инструмента, ето някои допълнителни ресурси, които трябва да разгледате.

  • Подрязване на празното пространство
  • Използване на условен оператор
  • Отпечатайте диапазон от колони
  • Regex с AWK
  • 20 AWK примера

Интернет е доста добро място да научите нещо. Има много страхотни уроци по основи на AWK за много напреднали потребители.

Последна мисъл

Надяваме се, че това ръководство е помогнало да се осигури добро разбиране на основите на AWK. Въпреки че може да отнеме известно време, овладяването на AWK е изключително полезно от гледна точка на мощта, която дава.

Щастливи компютри!

Контролирайте и управлявайте движението на мишката между множество монитори в Windows 10
Двоен дисплей на мишката ви позволява да контролирате и конфигурирате движението на мишката между множество монитори, като забавя движенията му близо ...
WinMouse ви позволява да персонализирате и подобрите движението на показалеца на мишката на компютър с Windows
Ако искате да подобрите функциите по подразбиране на показалеца на мишката, използвайте безплатна програма WinMouse. Той добавя още функции, за да ви ...
Бутонът на левия бутон на мишката не работи в Windows 10
Ако използвате специална мишка с вашия лаптоп или настолен компютър, но бутонът на левия бутон на мишката не работи на Windows 10/8/7 по някаква причи...