GNU / Linux tipa brīva operētājsistēmas komanda "awk" ir ļoti spēcīga komanda, kas palīdz mums labāk kontrolēt, apstrādājot datus no citām komandām vai komandām. Nosaukums AWK cēlies no tā autoru uzvārdu iniciāļiem: Alfrēds Aho, pēteris Weinbergers un Braiens Kernigans.
Šī komanda nodrošina skriptu valodu teksta apstrādei, ar kuras palīdzību mēs varam: definēt mainīgos, izmantot virknes un aritmētiskos operatorus, izmantot plūsmas kontroli un ciklus un ģenerēt formatētus pārskatus. Patiesībā Awk ir vairāk nekā tikai modeļa apstrādes komanda, tā ir visa semantiskās analīzes valoda.
Ievads komandā "awk"
AWK bija viena no pirmajām ļoti populārajām konsoles utilītprogrammām, kas pārvaldīja (apstrādā / izvelk) datus, maksimizējot UNIX cauruļu funkcionalitāti. Šīs utilītas piedāvātā valoda šobrīd ir standarts gandrīz visās mūsdienu UNIX līdzīgajās operētājsistēmās, tik daudz, ka tā ir daļa no UNIX pamata specifikācijām, tāpēc parasti pēc noklusējuma tā jau ir instalēta lielākajā daļā.
Visizplatītākā sintakse ir: awk 'programmas' faili un kur var būt 'programma': modelis {darbība} raksts {darbība}. Komanda nolasa faila ievadi pa vienai rindai. Katra rinda pēc kārtas tiek salīdzināta ar katru modeli; Katram modelim, kas atbilst rindai, tiek veikta atbilstošā darbība.
Tāds vienkāršs piemērs kā:
awk -F: '$1=="root" {print}' /etc/passwd
tas prasa pirmo lauku, ja tas ir katras / etc / passwd rindas sakne, un to izdrukā, ņemot vērā lauka atdalītāju ":" ar -F:.
Praktiski piemēri
Visbiežāk izmantoto komandu saraksts
Skatiet sarakstu, pamatojoties uz Sistēmas termināla vēsturi, kas sakārtota no visbiežāk izmantotās līdz vismazāk.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
piemērs:
Grafiks (tabula) ar savienojumu skaitu katram resursdatoram
Izveidojiet uz teksta balstītu ASCII diagrammu, kas parāda kopējo pieslēgumu skaitu no resursdatora uz katru IP adresi.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
piemērs:
Katalogu saraksts pēc lieluma
Uz ekrāna izdrukājiet pašreizējā ceļa direktoriju sarakstu no lielākajiem līdz mazākajiem, parādot etiķetes, kas atbilst to lielumam, izmantojot burtus: g, m un k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
piemērs:
Rādīt trafiku no tīkla saskarnes
Skatiet ienākošo un izejošo datu patēriņu tiešsaistē kilobaitos (kb) norādītajam tīkla interfeisam.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
piemērs:
Iegūstiet fibonacci skaitļu sēriju
Izveidojiet X daudzuma numuru sarakstu pēc fibonači modeļa, ņemot vērā 2 konstruējamos bāzes numurus.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
piemērs:
Grafisks failu struktūras saraksts pēc lieluma
Iegūstiet visu operētājsistēmas saknes mapju sarakstu kopā ar grafiku (joslām) un skaitlisko attēlojumu procentos no to lieluma tajā.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
piemērs:
Sarakstā norādiet failu tipu kopsavilkumu
Parādiet direktorijā esošo failu tipu sarakstu ar tam atbilstošo failu skaitu.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
piemērs:
Šie komandrindu piemēri, izmantojot komandu awk, ceru, ka jums tas būs ļoti noderīgi. Un tos var izmantot, lai tos izmantotu tieši no konsoles vai netieši, ievietojot tos skriptā (automatizēts uzdevums).
Nākamajā ziņojumā par Shell Scripting mēs izpētīsim citas komandas.
Ja vēlaties uzzināt nedaudz vairāk par komandu "grep", apmeklējiet šo saiti "VĀRDU VALODA”Un, ja vēlaties uzzināt vairāk par Shell Scripting mūsu pašu emuārā, jūs varat apskatīt citas mūsu publikācijas par šo tēmu, noklikšķinot šeit: Skriptēšana DesdeLinux
Es sapratu tikai pirmo piemēru, neko citu 🙁