Команди A-Z

40 Практични и полезни awk команди в Linux и BSD

40 Практични и полезни awk команди в Linux и BSD

AWK е мощен език за програмиране, управляван от данни, който датира от ранните дни на Unix. Първоначално е разработен за писане на „еднолинейни“ програми, но оттогава се е превърнал в пълноценен език за програмиране. AWK получава името си от инициалите на своите автори - Aho, Weinberger и Kernighan. Командата awk в Linux и други Unix системи извиква интерпретатора, който изпълнява AWK скриптове. Няколко реализации на awk съществуват в последните системи като gawk (GNU awk), mawk (Minimal awk) и nawk (New awk), наред с други. Вижте примерите по-долу, ако искате да овладеете awk.

Разбиране на програмите AWK


Програмите, написани на awk, се състоят от правила, които са просто двойка модели и действия. Моделите са групирани в скоба и частта за действие се задейства, когато awk намира текстове, които съответстват на шаблона. Въпреки че awk е разработен за писане на еднолинейни, опитни потребители могат лесно да пишат сложни скриптове с него.

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

Практически примери за командата awk в Linux


Обикновено администраторите използват awk за извличане на данни и докладване заедно с други видове манипулации с файлове. По-долу обсъдихме awk по-подробно. Следвайте внимателно командите и ги изпробвайте във вашия терминал за пълно разбиране.

1. Отпечатайте конкретни полета от изхода на текст


Най-широко използваните команди на Linux показват резултатите си, използвайки различни полета. Обикновено използваме командата Linux cut за извличане на конкретно поле от такива данни. Командата по-долу обаче ви показва как да направите това с помощта на командата awk.

$ кой | awk 'print $ 1'

Тази команда ще покаже само първото поле от изхода на командата who. Така че просто ще получите потребителските имена на всички регистрирани в момента потребители. Тук, $ 1 представлява първото поле. Трябва да използвате $ N ако искате да извлечете N-тото поле.

2. Отпечатайте няколко полета от текстовия изход


Интерпретаторът awk ни позволява да отпечатаме произволен брой полета, които желаем. Следващите примери ни показват как да извлечем първите две полета от изхода на командата who.

$ кой | awk 'print $ 1, $ 2'

Можете също така да контролирате реда на изходните полета. Следващият пример първо показва втората колона, произведена от командата who и след това първата колона във второто поле.

$ кой | awk 'print $ 2, $ 1'

Просто оставете параметрите на полето ($ N), за да се покажат всички данни.

3. Използвайте BEGIN Statements


Операторът BEGIN позволява на потребителите да отпечатат известна информация в изхода. Обикновено се използва за форматиране на изходните данни, генерирани от awk. Синтаксисът на този израз е показан по-долу.

НАЧАЛО Действия ДЕЙСТВИЕ

Действията, които формират раздела НАЧАЛО, винаги се задействат. След това awk чете останалите редове един по един и вижда дали трябва да се направи нещо.

$ кой | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2'

Горната команда ще обозначи двете изходни полета, извлечени от изхода на командата who.

4. Използвайте END отчети


Можете също да използвате оператора END, за да сте сигурни, че определени действия винаги се изпълняват в края на вашата операция. Просто поставете раздела END след основния набор от действия.

$ кой | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2 END print "--COMPLETED--"'

Горната команда ще добави дадения низ в края на изхода.

5. Търсене с помощта на модели


Голяма част от работата на awk включва съвпадение на шаблони и регулярни изрази. Както вече обсъдихме, awk търси модели във всеки ред за въвеждане и изпълнява действието само когато се задейства съвпадение. Предишните ни правила се състоеха само от действия. По-долу сме илюстрирали основите на съвпадението на шаблони с помощта на командата awk в Linux.

$ кой | awk '/ mary / print'

Тази команда ще види дали потребителят mary в момента е влязъл или не. Той ще изведе целия ред, ако бъде намерено съвпадение.

6. Извличане на информация от файлове


Командата awk работи много добре с файлове и може да се използва за сложни задачи за обработка на файлове. Следващата команда илюстрира как awk обработва файлове.

$ awk '/ hello / print' / usr / share / dict / american-english

Тази команда търси модела „здравей“ във файла с американско-английски речник. Той е достъпен за повечето дистрибуции, базирани на Linux. По този начин можете лесно да опитате awk програми на този файл.

7. Прочетете AWK Script от изходния файл


Въпреки че писането на еднолинейни програми е полезно, можете също да пишете големи програми, като използвате awk изцяло. Ще искате да ги запазите и да стартирате програмата си, като използвате изходния файл.

$ awk -f скрипт-файл $ awk --file скрипт-файл

The или -файл Опцията ни позволява да посочим програмния файл. Не е необходимо обаче да използвате кавички (") във файла на скрипта, тъй като обвивката на Linux няма да тълкува програмния код по този начин.

8. Задайте разделител на полето за въвеждане


Разделителят на поле е разделител, който разделя входния запис. Лесно можем да посочим разделители на полета, които да се активират с помощта на -F или -поле-сепаратор опция. Вижте командите по-долу, за да видите как работи това.

$ echo "Това е прост пример" | awk -F - 'print $ 1' $ echo "This-is-a-simple-example" | awk --field-separator - 'print $ 1'

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

9. Печат на информация въз основа на състоянието


Обсъдихме командата Linux cut в предишно ръководство. Сега ще ви покажем как да извличате информация, използвайки awk, само когато са изпълнени определени критерии. Ще използваме същия тестов файл, който използвахме в това ръководство. Затова се насочете към там и направете копие на тест.текст файл.

$ awk '$ 4> 50' тест.текст

Тази команда ще отпечата всички нации от теста.txt файл, който има повече от 50 милиона население.

10. Отпечатайте информация чрез сравняване на регулярни изрази


Следващата команда awk проверява дали третото поле на който и да е ред съдържа модела „Лира“ и отпечатва целия ред, ако бъде намерено съвпадение. Отново използваме теста.txt файл, използван за илюстриране на командата Linux cut. Затова се уверете, че имате този файл, преди да продължите.

$ awk '$ 3 ~ / Lira /' тест.текст

Можете да изберете да отпечатате само определена част от което и да е съвпадение, ако искате.

11. Пребройте общия брой редове при въвеждане


Командата awk има много специални променливи, които ни позволяват да правим много разширени неща лесно. Една такава променлива е NR, която съдържа номера на текущия ред.

$ awk 'END print NR' тест.текст

Тази команда ще изведе колко реда има в нашия тест.txt файл. Първо се итерира над всеки ред и след като достигне END, ще отпечата стойността на NR - която съдържа общия брой редове в този случай.

12. Задайте разделител на изходното поле


По-рано показахме как да изберем разделители на полето за въвеждане с помощта на -F или -поле-сепаратор опция. Командата awk също ни позволява да посочим разделителя на изходното поле. Примерът по-долу демонстрира това с помощта на практически пример.

$ дата | awk 'OFS = "-" печат $ 2, $ 3, $ 6'

Тази команда отпечатва текущата дата, използвайки формата dd-mm-yy. Стартирайте програмата за дата без awk, за да видите как изглежда изходът по подразбиране.

13. Използване на If Construct


Подобно на други популярни езици за програмиране, awk също предоставя на потребителите конструкциите if-else. Операторът if в awk има синтаксиса по-долу.

if (израз) first_action second_action

Съответните действия се изпълняват само ако условният израз е истина. Примерът по-долу демонстрира това с помощта на нашия референтен файл тест.текст.

$ awk 'if ($ 4> 100) print' тест.текст

Не е необходимо да поддържате строго отстъпа.

14. Използване на конструкции If-Else


Можете да създадете полезни if-else стълби, като използвате синтаксиса по-долу. Те са полезни при разработването на сложни awk скриптове, които се занимават с динамични данни.

if (израз) first_action else second_action
$ awk 'if ($ 4> 100) print; else print 'тест.текст

Горната команда ще отпечата целия референтен файл, тъй като четвъртото поле не е по-голямо от 100 за всеки ред.

15. Задайте ширината на полето


Понякога входните данни са доста разхвърляни и потребителите може да се затруднят да ги визуализират в своите отчети. За щастие awk предоставя мощна вградена променлива, наречена FIELDWIDTHS, която ни позволява да дефинираме списък с ширини, разделени с интервали.

$ ехо 5675784464657 | awk 'BEGIN FIELDWIDTHS = "3 4 5" print $ 1, $ 2, $ 3'

Това е много полезно при анализиране на разпръснати данни, тъй като можем да контролираме ширината на изходното поле точно както искаме.

16. Задайте разделителя на записи


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

$ котка ново.txt Мелинда Джеймс 23 Ню Хемпшир (222) 466-1234 Даниел Джеймс 99 Phonenix Road (322) 677-3412
$ awk 'BEGIN FS = "\ n"; print $ 1, $ 3' ново.текст

Тази команда ще анализира документа и ще изплюе името и адреса на двете лица.

17. Променливи на средата за печат


Командата awk в Linux ни позволява лесно да отпечатваме променливи на средата, използвайки променливата ENVIRON. Командата по-долу демонстрира как да се използва това за отпечатване на съдържанието на променливата PATH.

$ awk 'НАЧАЛО печат ENVIRON ["PATH"]'

Можете да отпечатате съдържанието на всякакви променливи на средата, като замените аргумента на променливата ENVIRON. Командата по-долу отпечатва стойността на променливата на околната среда HOME.

$ awk 'НАЧАЛО печат ENVIRON ["HOME"]'

18. Пропуснете някои полета от изхода


Командата awk ни позволява да пропуснем конкретни редове от нашия изход. Следващата команда ще демонстрира това с помощта на нашия референтен файл тест.текст.

$ awk -F ":" '$ 2 = ""; тест.текст

Тази команда ще пропусне втората колона на нашия файл, която съдържа името на столицата за всяка държава. Можете също да пропуснете повече от едно поле, както е показано в следващата команда.

$ awk -F ":" '$ 2 = ""; $ 3 = ""; print' тест.текст

19. Премахнете празни линии


Понякога данните могат да съдържат твърде много празни редове. Можете да използвате командата awk, за да премахнете празните редове доста лесно. Вижте следващата команда, за да видите как това работи на практика.

$ awk '/ ^ [\ t] * $ / next print' ново.текст

Премахнахме всички празни редове от файла нов.txt, използвайки прост регулярен израз и вградено awk, наречено next.

20. Премахнете последващите бели пространства


Резултатът от много команди на Linux съдържа затварящи бели пространства. Можем да използваме командата awk в Linux, за да премахнем такива бели пространства като интервали и раздели. Вижте командата по-долу, за да видите как да се справите с подобни проблеми с помощта на awk.

$ awk 'sub (/ [\ t] * $ /, ""); print' ново.txt тест.текст

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

21. Проверете броя на полетата във всеки ред


Можем лесно да проверим колко полета има в една линия, като използваме обикновена еднолинейна awk. Има много начини да направите това, но ние ще използваме някои от вградените променливи на awk за тази задача. Променливата NR ни дава номера на реда, а променливата NF предоставя броя на полетата.

$ awk 'print NR, "->", NF' тест.текст

Сега можем да потвърдим колко полета има на ред в нашия тест.текст документ. Тъй като всеки ред от този файл съдържа 5 полета, ние сме сигурни, че командата работи както се очаква.

22. Проверете текущото име на файла


Променливата awk FILENAME се използва за проверка на текущото име на входния файл. Ние демонстрираме как работи това, като използваме прост пример. Това обаче може да бъде полезно в ситуации, когато името на файла не е изрично известно или има повече от един входен файл.

$ awk 'print FILENAME' тест.txt $ awk 'print FILENAME' тест.txt нов.текст

Горните команди отпечатват името на файла, върху което работи awk всеки път, когато обработва нов ред от входните файлове.

23. Проверете броя на обработените записи


Следващият пример ще покаже как можем да проверим броя на записите, обработени от командата awk. Тъй като голям брой системни администратори на Linux използват awk за генериране на отчети, това е много полезно за тях.

$ awk 'print "Обработка на запис -", NR; END print "\ nОбщи обработени записи:", NR;' тест.текст

Често използвам този awk фрагмент, за да имам ясен преглед на действията си. Можете лесно да го промените, за да побере нови идеи или действия.

24. Отпечатайте общия брой знаци в запис


Езикът awk предоставя удобна функция, наречена length (), която ни казва колко символа присъстват в записа. Той е много полезен в редица сценарии. Разгледайте набързо следния пример, за да видите как работи това.

$ echo "Случаен текстов низ ..." | awk 'дължина на печат ($ 0);  '
$ awk 'дължина на печат ($ 0);  '/ etc / passwd

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

25. Отпечатайте всички редове, по-дълги от определена дължина


Можем да добавим някои условни условия към горната команда и да го накараме да отпечатва само онези редове, които са по-големи от предварително зададена дължина. Полезно е, когато вече имате представа за дължината на конкретен запис.

$ echo "Случайно текстов низ ..." | awk 'дължина ($ 0)> 10'
$ awk 'дължина ($ 0)> 5;  '/ etc / passwd

Можете да добавите повече опции и / или аргументи, за да промените командата въз основа на вашите изисквания.

26. Отпечатайте броя на редовете, знаците и думите


Следващата команда awk в Linux отпечатва броя редове, знаци и думи в даден вход. Той използва променливата NR, както и някои основни аритметични за извършване на тази операция.

$ echo "Това е входен ред ..." | awk 'w + = NF; c + = дължина + 1 END print NR, w, c '

Това показва, че във входния низ има 1 ред, 5 думи и точно 24 знака.

27. Изчислете честотата на думите


Можем да комбинираме асоциативни масиви и цикъла for в awk, за да изчислим честотата на думите на документ. Следващата команда може да изглежда малко сложна, но е доста проста, след като разберете ясно основните конструкции.

$ awk 'НАЧАЛО FS = "[^ a-zA-Z] +" за (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] ' test.txt

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

$ cat> честота.awk НАЧАЛО FS = "[^ a-zA-Z] +" за (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] 

След това го стартирайте с помощта на опция.

$ awk -f честота.awk тест.текст

28. Преименувайте файлове с помощта на AWK


Командата awk може да се използва за преименуване на всички файлове, отговарящи на определени критерии. Следващата команда илюстрира как да използвате awk за преименуване на всички .MP3 файлове в директория към .mp3 файлове.

$ touch a, b, c, d, e.MP3 $ ls *.MP3 | awk 'printf ("mv \"% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' $ ls *.MP3 | awk 'printf (""mv \""% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' | ш

Първо, създадохме някои демо файлове с .MP3 разширение. Втората команда показва на потребителя какво се случва, когато преименуването е успешно. И накрая, последната команда извършва операцията по преименуване, използвайки командата mv в Linux.

29. Отпечатайте квадратния корен на число


AWK предлага няколко вградени функции за манипулиране на цифри. Една от тях е функцията sqrt (). Това е C-подобна функция, която връща квадратния корен от дадено число. Разгледайте набързо следващия пример, за да видите как работи това като цяло.

$ awk 'BEGIN print sqrt (36)
        
Как да променяте настройките на мишката и тъчпада с помощта на Xinput в Linux
Повечето дистрибуции на Linux се доставят с библиотека “libinput” по подразбиране за обработка на входни събития в системата. Той може да обработва вх...
Пренастройте бутоните на мишката си по различен начин за различен софтуер с X-Mouse Button Control
Може би се нуждаете от инструмент, който може да промени контрола на мишката с всяко приложение, което използвате. Ако случаят е такъв, можете да изпр...
Преглед на безжична мишка на Microsoft Sculpt Touch
Наскоро прочетох за Microsoft Sculpt Touch безжична мишка и реших да я купя. След като го използвах известно време, реших да споделя опита си с него. ...