Awk: „Shell“ scenarijų mokymasis naudojant „awk“ terminalo komandą
GNU / Linux tipo komanda „awk“ laisvose operacinėse sistemose yra labai galinga komanda, padedanti mums geriau kontroliuoti apdorojant duomenis iš kitų komandų ar komandų komandų. AWK pavadinimas kilęs iš jo autorių pavardžių inicialų: Alfredas Aho, peter Weinbergeris ir Brianas Kerniganas.
Ši komanda suteikia teksto apdorojimo scenarijų kalbą, kuria mes galime: Apibrėžti kintamuosius, naudoti eilutes ir aritmetikos operatorius, naudoti srauto valdymą ir ciklus bei generuoti suformatuotas ataskaitas. Tiesą sakant, „Awk“ yra ne tik šablonų apdorojimo komanda, bet ir visa semantinės analizės kalba.
Įvadas į komandą „awk“
AWK buvo viena iš pirmųjų labai populiarių konsolės paslaugų, skirtų valdyti (tvarkyti / išgauti) duomenis maksimaliai padidinant UNIX vamzdynų funkcionalumą. Šio įrankio teikiama kalba šiuo metu yra beveik visų šiuolaikinių UNIX tipo operacinių sistemų standartas, tiek, kad ji yra pagrindinių UNIX specifikacijų dalis, todėl dažniausiai pagal numatytuosius nustatymus ji jau įdiegta daugumoje jų.
Dažniausiai pasitaikanti sintaksė yra: awk „programos“ failai ir kur gali būti „programa“: šablonas {veiksmas} šablonas {veiksmas}. Komanda nuskaito failo įvestį po vieną eilutę. Kiekviena eilutė yra lyginama su kiekvienu modeliu tvarka; Kiekvienam modeliui, atitinkančiam eilutę, atliekamas atitinkamas veiksmas.
Paprastas pavyzdys, pavyzdžiui:
awk -F: '$1=="root" {print}' /etc/passwd
jis prašo pirmojo lauko, jei jis yra kiekvienos eilutės šaknyje / etc / passwd, ir jį išspausdina atsižvelgdamas į „:“ su -F: kaip lauko separatorių.
Praktiniai pavyzdžiai
Dažniausiai naudojamų komandų sąrašas
Peržiūrėkite sąrašą pagal sistemos terminalo istoriją, sutvarkytą nuo dažniausiai naudojamų iki mažiausiai.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
pavyzdys:
Grafikas (lentelė) su kiekvieno kompiuterio jungčių skaičiumi
Sukurkite ASCII teksto schemą, kurioje būtų parodytas bendras ryšių iš pagrindinio kompiuterio ir kiekvieno IP adreso skaičius.
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 "" }'
pavyzdys:
Katalogų sąrašas pagal dydį
Ekrane atspausdinkite dabartinio kelio katalogų sąrašą nuo didžiausio iki mažiausio, nurodydami jų dydį atitinkančias etiketes raidėmis: g, m ir 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}'
pavyzdys:
Rodyti srautą iš tinklo sąsajos
Peržiūrėkite gaunamų ir siunčiamų duomenų suvartojimą internete kilobaitais (kb) nurodytoje tinklo sąsajoje.
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
pavyzdys:
Gaukite fibonacci skaičių seriją
Sukurkite X kiekio skaičių sąrašą pagal fibonacci modelį, nurodydami 2 pagrindinius skaičius, kurie bus sukonstruoti.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
pavyzdys:
Grafinis failų struktūros sąrašas pagal dydį
Gaukite visų operacinės sistemos šakninių aplankų sąrašą kartu su grafika (juostomis) ir skaitmeniniu vaizdu procentais nuo jų dydžio joje.
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"}'
pavyzdys:
Pateikite failų tipų santrauką kataloge
Rodyti kataloge esančių failų tipų sąrašą kartu su jį atitinkančių failų skaičiumi.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
pavyzdys:
Šie komandų eilutės, naudojant komandą awk, pavyzdžiai, tikiuosi, kad jums tai labai naudinga. Jie naudojami naudoti tiesiogiai iš konsolės arba netiesiogiai, įterpiant juos į scenarijų (automatinė užduotis).
Kitame „Shell Scripting“ įraše mes nagrinėsime kitas komandas.
Jei norite sužinoti šiek tiek daugiau apie komandą "grep", apsilankykite šioje nuorodoje "DEBIAN Wiki“Ir jei norite sužinoti daugiau apie„ Shell Scripting “mūsų pačių tinklaraštyje, galite peržiūrėti kitus mūsų leidinius šia tema, spustelėdami čia: Scenarijai „FromLinux“
Komentaras, palikite savo
Aš supratau tik pirmąjį pavyzdį, nieko kito 🙁