20 awk примера

20 Awk Examples



В операционната система Linux съществуват много помощни инструменти за търсене и генериране на отчет от текстови данни или файл. Потребителят може лесно да изпълнява много видове задачи за търсене, замяна и генериране на отчети, като използва команди awk, grep и sed. awk не е просто команда. Това е скриптов език, който може да се използва както от терминален, така и от awk файл. Той поддържа променливата, условното изявление, масив, цикли и т.н., както другите скриптови езици. Той може да чете всяко съдържание на файл ред по ред и да отделя полетата или колоните въз основа на конкретен разделител. Той също така поддържа регулярен израз за търсене на конкретен низ в текстовото съдържание или файл и предприема действия, ако има съвпадение. Как можете да използвате командата и скрипта awk е показано в този урок с помощта на 20 полезни примера.

Съдържание:

  1. awk с printf
  2. awk за разделяне на бяло пространство
  3. awk за смяна на разделителя
  4. awk с данни, разделени с раздели
  5. awk с csv данни
  6. awk regex
  7. awk, нечувствителен към регистъра
  8. awk с променлива nf (брой полета)
  9. awk функция gensub ()
  10. awk с функция rand ()
  11. awk потребителска функция
  12. awk ако
  13. awk променливи
  14. awk масиви
  15. awk цикъл
  16. awk за отпечатване на първата колона
  17. awk за отпечатване на последната колона
  18. awk с grep
  19. awk с bash скрипт файла
  20. awk със sed

Използване на awk с printf

printf () функцията се използва за форматиране на всеки изход в повечето от езиците за програмиране. Тази функция може да се използва с awk команда за генериране на различни типове форматирани изходи. awk команда, използвана главно за всеки текстов файл. Създайте текстов файл с име служител.txt със съдържанието, дадено по -долу, където полетата са разделени с табулатор („ t“).







служител.txt



1001 Джон сена 40000
1002 Джафар Икбал 60000
1003 Мехер Нигар 30000
1004 Джони Ливър 70000

Следващата команда awk ще чете данни от служител.txt файл ред по ред и отпечатайте първия файл след форматиране. Тук, %10s n означава, че изходът ще бъде с дължина 10 знака. Ако стойността на изхода е по -малка от 10 знака, тогава интервалите ще бъдат добавени в предната част на стойността.



$ awk'{printf'%10sн', $ 1}'служител.текст

Изход:





Отидете на Съдържание



awk за разделяне на бяло пространство

Разделителят на думи или полета по подразбиране за разделяне на всеки текст е празно място. Командата awk може да приема текстова стойност като вход по различни начини. Въведеният текст се предава от изхвърлен команда в следния пример. Текстът, ' Харесва ми програмирането “Ще бъде разделен по подразбиране по подразбиране, пространство , а третата дума ще бъде отпечатана като изход.

$изхвърлен „Обичам програмирането“ | awk „{отпечатайте $ 3}“

Изход:

Отидете на Съдържание

awk за смяна на разделителя

Команда awk може да се използва за промяна на разделителя за всяко съдържание на файл. Да предположим, че имате текстов файл с име phone.txt със следното съдържание, където „:“ се използва като разделител на полета на съдържанието на файла.

phone.txt

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Изпълнете следната команда awk, за да смените разделителя, ‘:’ от ‘-’ към съдържанието на файла, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Изход:

Отидете на Съдържание

awk с данни, разделени с раздели

Командата awk има много вградени променливи, които се използват за четене на текста по различни начини. Две от тях са FS и OFS . FS е разделител на полета за въвеждане и OFS е променливи на разделителя на изходното поле. Използването на тези променливи е показано в този раздел. Създавам раздел отделен файл с име input.txt със следното съдържание за тестване на употребата на FS и OFS променливи.

Input.txt

Скриптов език от страна на клиента
Скриптов език от страна на сървъра
Сървър за бази данни
Уеб сървър

Използване на променлива FS с табулация

Следващата команда ще раздели всеки ред на input.txt файл въз основа на раздела („ t“) и отпечатайте първото поле на всеки ред.

$awk „{print $ 1}“ FS='T'input.txt

Изход:

Използване на променлива OFS с табулация

Следващата команда awk ще отпечата 9th и 5th полета на „Ls -l“ команден изход с разделител на табулации след отпечатване на заглавието на колоната Име и Размер . Тук, OFS променливата се използва за форматиране на изхода чрез раздел.

$ls -на
$ls -на | awk -v OFS='T' 'BEGIN {printf'%s t%s n ',' Name ',' Size '} {print $ 9, $ 5}'

Изход:

Отидете на Съдържание

awk с CSV данни

Съдържанието на всеки CSV файл може да бъде анализирано по няколко начина с помощта на команда awk. Създайте CSV файл с име „ customer.csv “Със следното съдържание, за да приложите команда awk.

customer.txt

Идентификатор, име, имейл, телефон
1, София, [защитена по имейл], (862) 478-7263
2, Amelia, [защитено по имейл], (530) 764-8000
3, Ема, [защитена по имейл], (542) 986-2390

Четене на едно поле на CSV файл

„-F“ опцията се използва с команда awk за задаване на разделител за разделяне на всеки ред от файла. Следващата команда awk ще отпечата име в сферата на the customer.csv файл.

$коткаcustomer.csv
$awk -F ',' „{отпечатайте $ 2}“customer.csv

Изход:

Четене на множество полета чрез комбиниране с друг текст

Следващата команда ще отпечата три полета на customer.csv чрез комбиниране на заглавния текст, Име, имейл и телефон . Първият ред на customer.csv файлът съдържа заглавието на всяко поле. НЕ променливата съдържа номера на реда на файла, когато командата awk анализира файла. В този пример, NR променливата се използва за пропускане на първия ред на файла. Изходът ще покаже 2nd, 3rdи 4thполета на всички редове с изключение на първия ред.

$awk -F ',' 'NR> 1 {print' Name: '$ 2', Email: '$ 3', Phone: '$ 4}'customer.csv

Изход:

Четене на CSV файл с помощта на awk скрипт

awk скриптът може да бъде изпълнен чрез стартиране на awk файл. Как можете да създадете awk файл и да го стартирате е показано в този пример. Създайте файл с име awkcsv.awk със следния код. НАЧАЛО keyword се използва в скрипта за информиране на команда awk за изпълнение на скрипта на НАЧАЛО разделете първо, преди да изпълните други задачи. Тук разделител на полета ( FS ) се използва за определяне на разделителния разделител и 2ndи 1улполетата ще бъдат отпечатани според формата, използван във функцията printf ().

awkcsv.awk
НАЧАЛО{FS= ','} { printf '% 5s (% s)н',$2,$1}

Бягай awkcsv.awk файл със съдържанието на the customer.csv файл чрез следната команда.

$awk -fawkcsv.awk customer.csv

Изход:

Отидете на Съдържание

awk regex

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

Съответстващ геройкомплект

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

$printf - ГлупакнГотинонКукланbool ' | awk '/[FbC] ool/'

Изход:

Търсене на низ в началото на реда

‘^’ символ се използва в регулярния израз за търсене на всеки модел в началото на реда. ‘ Linux “ думата ще се търси в началото на всеки ред от текста в следния пример. Тук два реда започват с текста, „Linux “И тези два реда ще бъдат показани в изхода.

$изхвърлен „Linux е безплатен за използваненТова е софтуер с отворен коднLinuxHint е
популярен сайт за блогове “
| awk '/^Linux/'

Изход:

Търсене на низ в края на реда

„$“ символ се използва в регулярния израз за търсене на всеки модел в края на всеки ред от текста. ‘ Сценарий Думата се търси в следния пример. Тук два реда съдържат думата, Сценарий в края на реда.

$изхвърлен 'PHP скриптнJavaScriptнВизуално програмиране ' | awk '/Script $/'

Изход:

Търсене чрез пропускане на определен набор от символи

‘^’ символът показва началото на текста, когато се използва пред произволен модел на низ („ / ^… /“) или преди който и да е набор от символи, деклариран от ^ […] . Ако ‘^’ символ се използва вътре в третата скоба, [^…], тогава дефинираният набор от символи в скобата ще бъде пропуснат в момента на търсене. Следващата команда ще търси всяка дума, която не започва с „F“ но завършва с „ ool '. Готино и bool ще бъдат отпечатани според шаблона и текстовите данни.

$ printf - ГлупакнГотинонКукланbool ' |awk' / [^ F] ool /'

Изход:

Отидете на Съдържание

awk, нечувствителен към регистъра

По подразбиране регулярният израз прави търсене, чувствително към регистъра, когато търси всеки модел в низа. Нечувствителното към регистър търсене може да се извърши чрез команда awk с регулярния израз. В следния пример, да понижи() функцията се използва за търсене без чувствителност към регистъра. Тук първата дума от всеки ред от въведения текст ще бъде преобразувана в малки букви чрез използване да понижи() функция и съвпадение с шаблона на регулярния израз. toupper () функция може да се използва и за тази цел, в този случай моделът трябва да бъде дефиниран с цялата главна буква. Текстът, дефиниран в следния пример, съдържа думата за търсене, „Уеб “В два реда, които ще бъдат отпечатани като изход.

$изхвърлен 'Уеб дизайннуеб разработканРамка ' | awk 'tolower ($ 0) ~ /^уеб /;'

Изход:

Отидете на Съдържание

awk с променлива NF (брой полета)

NF е вградена променлива на команда awk, която се използва за преброяване на общия брой полета във всеки ред на входящия текст. Създайте всеки текстов файл с множество редове и няколко думи. входния.txt тук се използва файл, създаден в предишния пример.

Използване на NF от командния ред

Тук първата команда се използва за показване на съдържанието на input.txt file и втората команда се използва за показване на общия брой полета във всеки ред на файла, който се използва NF променлива.

$ cat input.txt
$ awk '{print NF}' input.txt

Изход:

Използване на NF в awk файл

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

count.awk

{отпечатайте $0}
{печат'[Общо полета:'NF']'}

Изпълнете скрипта чрез следната команда.

$awk -fcount.awk input.txt

Изход:

Отидете на Съдържание

awk функция gensub ()

getsub () е функция за заместване, която се използва за търсене на низ въз основа на конкретен разделител или модел на регулярен израз. Тази функция е дефинирана в „Гаук“ пакет, който не е инсталиран по подразбиране. Синтаксисът за тази функция е даден по -долу. Първият параметър съдържа шаблона на регулярния израз или разделителя за търсене, вторият параметър съдържа заместващия текст, третият параметър показва как ще се извърши търсенето, а последният параметър съдържа текста, в който тази функция ще бъде приложена.

Синтаксис:

gensub(regexp, замяна, как[, цел])

Изпълнете следната команда за инсталиране глупак пакет за използване getsub () функция с команда awk.

$ sudo apt-get install gawk

Създайте текстов файл с име „ salesinfo.txt “Със следното съдържание, за да практикувате този пример. Тук полетата са разделени от раздел.

salesinfo.txt

Моите 700000
Вашите 800000
Ср. 750000
Съберете 200000
Пет 430000
Сб 820000

Изпълнете следната команда, за да прочетете числовите полета на salesinfo.txt файл и отпечатайте общата сума на всички продажби. Тук третият параметър „G“ показва глобалното търсене. Това означава, че моделът ще се търси в пълното съдържание на файла.

$awk '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} END {печат 0} 'salesinfo.txt| пр.н.е. -на

Изход:

Отидете на Съдържание

awk с функция rand ()

ред () функцията се използва за генериране на произволно произволно число по -голямо от 0 и по -малко от 1. Така че, тя винаги ще генерира дробно число по -малко от 1. Следващата команда ще генерира дробно случайно число и ще умножи стойността с 10, за да получи число повече от 1. Дробно число с две цифри след десетичната запетая ще бъде отпечатано за прилагане на функцията printf (). Ако изпълнявате следната команда няколко пъти, всеки път ще получавате различен изход.

$awk 'BEGIN {printf' Number is =%. 2f n ', rand ()*10}'

Изход:

Отидете на Съдържание

awk потребителска функция

Всички функции, използвани в предишните примери, са вградени функции. Но можете да декларирате дефинирана от потребителя функция във вашия awk скрипт за извършване на всяка конкретна задача. Да предположим, че искате да създадете персонализирана функция за изчисляване на площта на правоъгълник. За да направите тази задача, създайте файл с име ‘ area.awk “Със следния скрипт. В този пример дефинирана от потребителя функция с име ■ площ() е деклариран в скрипта, който изчислява площта въз основа на входните параметри и връща стойността на областта. getline командата се използва тук за получаване на въвеждане от потребителя.

area.awk

# Изчислете площ
функция■ площ(височина,ширина){
връщаневисочина*ширина
}

# Започва изпълнение
НАЧАЛО{
печат'Въведете стойността на височината:'
getline h< '-'
печат'Въведете стойността на ширината:'
getline w< '-'
печат'Area ='■ площ(з,в)
}

Стартирайте скрипта.

$awk -farea.awk

Изход:

Отидете на Съдържание

awk ако пример

awk поддържа условни изявления като други стандартни езици за програмиране. В този раздел са показани три вида оператори if, като се използват три примера. Създайте текстов файл с име items.txt със следното съдържание.

items.txt

HDD Samsung $ 100
Мишка A4Tech
Принтер HP 200 долара

Прост ако пример :

Следващата команда ще прочете съдържанието на items.txt файл и проверете 3rd стойност на полето във всеки ред. Ако стойността е празна, тя ще отпечата съобщение за грешка с номера на реда.

$awk '{if ($ 3 ==' ') print' Полето за цена липсва в ред 'NR}'items.txt

Изход:

пример за if-else:

Следващата команда ще отпечата цената на артикула, ако 3rdполе съществува в реда, в противен случай ще отпечата съобщение за грешка.

$ awk'{if ($ 3 ==' ') print' Полето за цена липсва '
иначе отпечатайте „цената на артикула е„ $ 3} “
елементи.текст

Изход:

if-else-if пример:

Когато следната команда ще се изпълни от терминала, тя ще приеме въвеждане от потребителя. Входната стойност ще се сравнява с всяко условие if, докато условието е вярно. Ако някое условие стане вярно, то ще отпечата съответната оценка. Ако входната стойност не съвпада с нито едно условие, тя ще отпечата неуспешно.

$awk 'BEGIN {print' Въведете знака: '
марка getline<'-'
ако (маркирайте> = 90) отпечатайте „A+“
в противен случай (маркирайте> = 80) отпечатайте 'A'
в противен случай (маркирайте> = 70) отпечатайте 'B+'
else отпечатайте 'Fail'} '

Изход:

Отидете на Съдържание

awk променливи

Декларацията на awk променлива е подобна на декларацията на променливата shell. Има разлика в четенето на стойността на променливата. Символът „$“ се използва с името на променливата за променливата на черупката, за да прочете стойността. Но няма нужда да използвате „$“ с променлива awk, за да прочетете стойността.

Използвайки проста променлива:

Следващата команда ще декларира променлива с име „Сайт“ и на тази променлива се присвоява низова стойност. Стойността на променливата е отпечатана в следващото изявление.

$awk 'BEGIN {site =' LinuxHint.com '; сайт за печат} '

Изход:

Използване на променлива за извличане на данни от файл

Следващата команда ще търси думата „Принтер“ във файла items.txt . Ако някой ред от файла започва с „Принтер “, Тогава той ще съхранява стойността на 1ул , 2nd и 3rd полета в три променливи. име и цена променливите ще бъдат отпечатани.

$ awk'/ Printer/ {name = $ 1; brand = $ 2; price = $ 3; print' item name = 'name;
отпечатайте 'item price =' price} '
елементи.текст

Изход:

Отидете на Съдържание

awk масиви

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

Асоциативен масив:

Индексът на масива ще бъде всеки низ за асоциативния масив. В този пример се декларира и отпечатва асоциативен масив от три елемента.

$awk 'НАЧАЛО {
books ['Web Design'] = 'Изучаване на HTML 5';
books ['Web Programming'] = 'PHP и MySQL'
books ['PHP Framework'] = 'Учене на Laravel 5'
printf '%s n%s n%s n', книги ['Уеб дизайн'], книги ['Уеб програмиране'],
книги ['PHP Framework']} '

Изход:

Числов масив:

Числов масив от три елемента се декларира и отпечатва чрез разделяне на табулация.

$ awk'НАЧАЛО {
номер [0] = 80;
номер [1] = 55;
номер [2] = 76;

# печатни елементи на масив
printf 'Стойности на масива: %dTTн', номер [0], номер [1], номер [2]; } '

Изход:

Отидете на Съдържание

awk цикъл

Awk поддържа три типа цикли. Използването на тези контури е показано тук с помощта на три примера.

Цикъл while:

while цикълът, който се използва в следната команда, ще повтори 5 пъти и ще излезе от цикъла за оператор break.

$ awk 'НАЧАЛО {n = 1; while (n 5) прекъсване; отпечатайте n; n ++}} '

Изход:

За цикъл:

For цикъл, който се използва в следната команда awk ще изчисли сумата от 1 до 10 и ще отпечата стойността.

$awk 'BEGIN {сума = 0; за (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Изход:

Do-while цикъл:

цикълът do-while на следната команда ще отпечата всички четни числа от 10 до 5.

$awk 'BEGIN {counter = 10; do {if (counter%2 == 0) print counter; брояч-}
while (брояч> 5)} '

Изход:

Отидете на Съдържание

awk за отпечатване на първата колона

Първата колона на всеки файл може да бъде отпечатана с помощта на променлива $ 1 в awk. Но ако стойността на първата колона съдържа няколко думи, тогава се отпечатва само първата дума от първата колона. С помощта на определен разделител първата колона може да бъде отпечатана правилно. Създайте текстов файл с име students.txt със следното съдържание. Тук първата колона съдържа текста на две думи.

Студенти.txt

Каниз Фатема 30thпартида
Абир Хосейн 35thпартида
Йоан Авраам 40thпартида

Изпълнете команда awk без разделител. Първата част от първата колона ще бъде отпечатана.

$awk „{print $ 1}“students.txt

Изпълнете команда awk със следния разделител. Цялата част от първата колона ще бъде отпечатана.

$awk -F '\ s \ s' „{print $ 1}“students.txt

Изход:

Отидете на Съдържание

awk за отпечатване на последната колона

$ (NF) променливата може да се използва за отпечатване на последната колона на всеки файл. Следните команди awk ще отпечатат последната част и пълната част от последната колона на студентите.txt файл.

$awk '{print $ (NF)}'students.txt
$awk -F '\ s \ s' '{print $ (NF)}'students.txt

Изход:

Отидете на Съдържание

awk с grep

grep е друга полезна команда на Linux за търсене на съдържание във файл въз основа на всеки регулярен израз. В следващия пример е показано как командите awk и grep могат да се използват заедно. захващане командата се използва за търсене на информация за идентификационния номер на служителя, „ 1002 ’От служителят.txt файл. Изходът на командата grep ще бъде изпратен на awk като входни данни. 5% бонус ще се брои и отпечата въз основа на заплатата на идентификационния номер на служителя, „ 1002 ' по команда awk.

$коткаслужител.txt
$захващане „1002“служител.txt| awk -F 'T' '{print $ 2' ще получи $ '($ 3*5)/100' bonus '}'

Изход:

Отидете на Съдържание

awk с BASH файл

Подобно на друга команда на Linux, командата awk може да се използва и в BASH скрипт. Създайте текстов файл с име customers.txt със следното съдържание. Всеки ред от този файл съдържа информация за четири полета. Това са ИД на клиента, Име, адрес и мобилен номер, които са разделени с ‘/ '.

customers.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Алабама / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, California / 415-679-5908
IL4855 / Ann Neale / 1932 Patterson Fork Road, Чикаго, Илинойс / 773-550-5107

Създайте bash файл с име item_search.bash със следния скрипт. Според този скрипт стойността на състоянието ще бъде взета от потребителя и ще бъде търсена клиентите.txt файл от захващане команда и предадена на командата awk като вход. Командата Awk ще прочете 2nd и 4th полета на всеки ред. Ако входната стойност съвпада с която и да е стойност на състоянието на customers.txt файл, след което той ще отпечата файла на клиента име и мобилен номер , в противен случай ще отпечата съобщението Не е намерен клиент .

item_search.bash

#!/bin/bash
изхвърлен 'Въведете името на държавата:'
Прочетисъстояние
клиенти=захващане '$ състояние'customers.txt| awk -F '/' '{print' Име на клиента: '$ 2,',
Мобилен номер: „$ 4}“

ако [ '$ клиенти' !='' ];тогава
изхвърлен $ клиенти
иначе
изхвърлен „Не е намерен клиент“
бъда

Изпълнете следните команди, за да покажете изходите.

$коткаcustomers.txt
$башitem_search.bash

Изход:

Отидете на Съдържание

awk със sed

Друг полезен инструмент за търсене на Linux е sed . Тази команда може да се използва както за търсене, така и за замяна на текст на всеки файл. Следващият пример показва използването на команда awk с sed команда. Тук командата sed ще търси всички имена на служители, започващи с „ J “И преминава към команда awk като вход. awk ще отпечата служител име и документ за самоличност след форматиране.

$коткаслужител.txt
$sed '/J/p'служител.txt| awk -F 'T' '{printf'%s (%s) n ', $ 2, $ 1}'

Изход:

Отидете на Съдържание

Заключение:

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