Het "awk" -commando in vrije besturingssystemen van het GNU / Linux-type is een zeer krachtig commando, dat ons helpt om meer controle te hebben bij het verwerken van gegevens van andere commando's of commando-commando's. De naam AWK is afgeleid van de initialen van de achternamen van de auteurs: Alfred Aho, peter Weinberger en Brian KErnighan.
Dit commando biedt een scripttaal voor tekstverwerking waarmee we: variabelen kunnen definiëren, strings en rekenkundige operatoren kunnen gebruiken, flow control en cycli kunnen gebruiken en opgemaakte rapporten kunnen genereren. Eigenlijk is Awk meer dan alleen een patroonverwerkingsopdracht, het is een volledige semantische analysetaal.
Inleiding tot het "awk" -commando
AWK was een van de eerste zeer populaire console-hulpprogramma's voor het beheren (verwerken / extraheren) van gegevens door de functionaliteit van UNIX-pipelines te maximaliseren. De taal die door dit hulpprogramma wordt geleverd, is momenteel een standaard in bijna alle moderne besturingssystemen van het UNIX-type, zozeer zelfs dat het deel uitmaakt van de basisspecificaties van UNIX, dus het is meestal al in de meeste standaard geïnstalleerd.
De meest voorkomende syntaxis is: awk 'programma'-bestanden en waar' programma 'kan zijn: patroon {actie} patroon {actie}. De opdracht leest de bestandsinvoer regel voor regel. Elke rij wordt in volgorde met elk patroon vergeleken; Voor elk patroon dat overeenkomt met de rij, wordt de bijbehorende actie uitgevoerd.
Een eenvoudig voorbeeld als:
awk -F: '$1=="root" {print}' /etc/passwd
het vraagt naar het eerste veld of het de root is van elke regel in / etc / passwd en drukt het af met inachtneming van de ":" met -F: als een veldscheidingsteken.
Praktische voorbeelden
Lijst met meest gebruikte commando's
Bekijk een lijst op basis van de geschiedenis van de systeemterminal, gerangschikt van de meest gebruikte tot de minst gebruikte.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
voorbeeld:
Grafiek (tabel) met het aantal verbindingen voor elke host
Maak een op ASCII-tekst gebaseerde grafiek die het totale aantal verbindingen van de host naar elk IP-adres laat zien.
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 "" }'
voorbeeld:
Lijst met mappen op grootte
Druk op het scherm de lijst met mappen van het huidige pad af van het grootste naar het kleinste en laat de labels zien die overeenkomen met hun grootte met de letters: g, m en 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}'
voorbeeld:
Toon verkeer van een netwerkinterface
Bekijk het inkomende en uitgaande dataverbruik online in kilobytes (kb) voor een gespecificeerde netwerkinterface.
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
voorbeeld:
Verkrijg een fibonacci-nummerreeks
Maak een lijst met X-groottenummers volgens een fibonacci-patroon met 2 te construeren basisnummers.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
voorbeeld:
Grafische lijst van bestandsstructuur op grootte
Verkrijg een lijst met alle mappen in de root van het besturingssysteem, samen met de afbeelding (balken) en numerieke weergave als percentage van hun grootte erin.
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"}'
voorbeeld:
Geef een overzicht van de bestandstypen in een directory
Geef een lijst weer van de bestandstypen in een directory, samen met het aantal bestanden dat ermee overeenkomt.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
voorbeeld:
Deze voorbeelden van opdrachtregels die het awk-commando gebruiken, hoop ik dat u het erg nuttig vindt. En ze dienen om direct vanaf de console te worden gebruikt of indirect door ze in een script in te voegen (geautomatiseerde taak).
In de volgende post over Shell Scripting zullen we andere commando's onderzoeken.
Als je wat meer wilt weten over het "grep" commando, bezoek dan deze link "DEBIAN Wiki”En als je meer wilt weten over Shell Scripting in onze eigen Blogkunt u onze andere publicaties over dit onderwerp bekijken door hier te klikken: Scripten DesdeLinux
Ik begreep alleen het eerste voorbeeld, verder niets 🙁