Awk: Shelli skriptimise õppimine awk terminali käsu abil
GNU / Linuxi tüüpi käsk "awk" vabades operatsioonisüsteemides on väga võimas käsk, mis aitab meil teistest käskudest või käskudest saadud andmete töötlemisel suuremat kontrolli omada. Nimi AWK tuleneb selle autorite perekonnanimede algustähtedest: Alfred Atere, Peeter Weinberger ja Brian KErnighan.
See käsk annab tekstitöötluseks skriptikeele, millega saame: määratleda muutujad, kasutada stringe ja aritmeetilisi operaatoreid, kasutada voo juhtimist ja tsükleid ning genereerida vormindatud aruandeid. Tegelikult on Awk midagi enamat kui lihtsalt mustri töötlemise käsk, see on terve semantiline analüüsikeel.
Sissejuhatus käsusse "awk"
AWK oli üks esimesi väga populaarseid konsooli utiliite andmete haldamiseks (käitlemiseks / väljavõtmiseks) UNIX-torujuhtmete funktsionaalsuse maksimeerimise kaudu. Selle utiliidi pakutav keel on praegu peaaegu kõigi kaasaegsete UNIX-tüüpi operatsioonisüsteemide standard, nii palju, et see on osa UNIX-i põhispetsifikatsioonidest, nii et enamasti on see enamikus vaikimisi juba installitud.
Selle kõige levinum süntaks on: awk 'programmi' failid ja kus 'programm' võib olla: muster {action} muster {action}. Käsk loeb failisisestust üks rida korraga. Iga rida võrreldakse iga mustriga järjestuses; iga reale vastava mustri kohta tehakse vastav toiming.
Lihtne näide:
awk -F: '$1=="root" {print}' /etc/passwd
see küsib esimest välja, kui see on faili / etc / passwd iga rea juur, ja prindib selle, võttes välja eraldajana ":" koos -F: -ga.
Praktilised näited
Enimkasutatud käskude loend
Vaadake loendit, mis põhineb süsteemiterminali ajaloos, järjestatuna kõige sagedamini kasutatavast kõige vähem.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Näide:

Graafik (tabel) koos kõigi hostide ühenduste arvuga
Looge ASCII tekstipõhine graafik, mis näitab hostide ja IP-ühenduste koguarvu.
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 "" }'
Näide:

Kataloogide loetelu suuruse järgi
Printige ekraanile praeguse tee kataloogide loend suurimast väiksemani, näidates nende suurusele vastavaid silte tähtede abil: g, m ja 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}'
Näide:

Liikluse kuvamine võrguliidese kaudu
Vaadake sissetuleva ja väljamineva andmekulu veebis võrgus kilobaitides (kb) määratud võrguliidese jaoks.
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
Näide:

Hankige fibonacci numbriseeria
Koostage fibonacci mustri järgi X koguse numbri loend, millele antakse 2 konstrueeritavat baasinumbrit.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
Näide:

Faili struktuuri graafiline loetelu suuruse järgi
Hankige kõigi operatsioonisüsteemi juurte kaustade loend koos graafika (ribad) ja numbrilise esitusega protsentuaalselt nende suurusest selles.
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"}'
Näide:

Lisage kataloogi failitüüpide kokkuvõte
Kuva kataloogis olevate failitüüpide loend koos sellele vastavate failide arvuga.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
Näide:

Need käsurea näited käsuga awk, loodan, et leiate sellest väga kasulikku. Ja neid kasutatakse kasutamiseks otse konsoolist või kaudselt, sisestades need skripti (automatiseeritud ülesanne).
Järgmises Shelli skriptimise postituses uurime teisi käske.
Kui soovite käsu "grep" kohta veidi rohkem teada saada, külastage seda linki "DEBIAN WikiJa kui soovite Shelli skriptimise kohta lisateavet meie enda ajaveebist, saate vaadata meie teisi selleteemalisi väljaandeid, klõpsates siin: Skriptimine FromLinuxis
