Awk: Učenje skripti ljuske pomoću naredbe awk terminala
Naredba "awk" u besplatnim operativnim sustavima tipa GNU / Linux vrlo je moćna naredba koja nam pomaže da imamo veću kontrolu prilikom obrade podataka iz drugih naredbi ili naredbi naredbi. Ime AWK potječe od inicijala prezimena njegovih autora: Alfred Aho, peter Weinberger i Brian KErnighan.
Ova naredba pruža skriptni jezik za obradu teksta pomoću kojeg možemo: Definirati varijable, koristiti nizove i aritmetičke operatore, koristiti kontrolu protoka i cikluse i generirati formatirana izvješća. Zapravo, Awk je više od puke naredbe za obradu uzorka, to je čitav jezik semantičke analize.
Uvod u naredbu "awk"
AWK je bio jedan od prvih vrlo popularnih uslužnih programa konzole za upravljanje (rukovanje / izdvajanje) podataka maksimiziranjem funkcionalnosti UNIX cjevovoda. Jezik koji nudi ovaj uslužni program trenutno je standard u gotovo svim modernim operacijskim sustavima UNIX-a, toliko da je dio osnovnih UNIX-ovih specifikacija, pa je u većini njih po defaultu već instaliran.
Njegova najčešća sintaksa je: awk 'program' datoteke i gdje 'program' može biti: pattern {action} pattern {action}. Naredba čita unos datoteke jedan po jedan redak. Svaki se red uspoređuje sa svakim uzorkom; Za svaki obrazac koji odgovara retku izvodi se odgovarajuća radnja.
Jednostavan primjer poput:
awk -F: '$1=="root" {print}' /etc/passwd
traži prvo polje ako je korijen svakog retka u / etc / passwd i ispisuje ga uzimajući u obzir ":" s -F: kao separator polja.
Praktični primjeri
Popis najčešće korištenih naredbi
Pregledajte popis na temelju povijesti sistemskog terminala poredanog od najčešće korištenih do najmanjih.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
primjer:

Grafikon (tablica) s brojem veza za svaki domaćin
Stvorite ASCII tekstualni grafikon koji prikazuje ukupan broj veza od hosta do svake IP adrese.
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 "" }'
primjer:

Popis direktorija prema veličini
Ispišite na zaslon popis direktorija trenutne staze od najvećeg do najmanjeg s prikazom naljepnica koje odgovaraju njihovoj veličini pomoću slova: g, m i 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}'
primjer:

Prikažite promet s mrežnog sučelja
Pregledajte internetsku potrošnju ulaznih i izlaznih podataka u kilobajtima (kb) za određeno mrežno sučelje.
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
primjer:

Dobiti fibonaccijev niz brojeva
Stvorite popis X brojeva količina slijedeći fibonaccijev obrazac s obzirom na 2 osnovna broja koja treba konstruirati.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
primjer:

Grafički popis strukture datoteke prema veličini
Nabavite Popis svih mapa u korijenu operacijskog sustava, zajedno s grafikom (trake) i numeričkim prikazom kao postotak njihove veličine unutar njega.
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"}'
primjer:

Navedite sažetak vrsta datoteka u direktoriju
Prikažite popis vrsta datoteka koje se nalaze u direktoriju zajedno s brojem datoteka koje mu odgovaraju.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
primjer:

Ovi primjeri naredbenih redaka koji koriste naredbu awk Nadam se da će vam biti vrlo korisni. A koriste se za upotrebu izravno s konzole ili neizravno umetanjem u skriptu (automatizirani zadatak).
U sljedećem postu o Shell Scriptingu istražit ćemo druge naredbe.
Ako želite saznati nešto više o naredbi "grep", posjetite ovaj link "DEBIAN Wiki”A ako želite saznati više o Shell skriptiranju na našem vlastitom blogu, možete pogledati naše ostale publikacije na tu temu, klikom ovdje: Skriptiranje u FromLinuxu
