Awk is een programmeertaal om gestructureerde gegevens te manipuleren en rapporten van deze gegevens te maken. Awk is een acroniem van de auteurs Aho, Weinberger en Kernighan.
Awk wordt vooral gebruikt om patronen op te sporen en te verwerken. Het onderzoekt één of meerdere bestanden op het voorkomen van regels die een bepaald patroon bevatten en voert er daarna bewerkingen op uit.
De voornaamste kenmerken van Awk zijn:Awk leest de gegevens uit een bestand of via de standaard invoer (toetsenbord) en voert het resultaat uit naar de standaard uitvoer (het scherm). Awk kan geen binaire bestanden verwerken.
Syntaxis:awk '/zoekpatroon1/ {Acties}
/zoekpatroon2/ {Acties}' bestand
Waarbij:
dany@linux-4wlv:~> cat werknemers.txt
100 Thomas Manager Verkoop €5.000
200 Jason Developer Technology €5.500
300 Sanjay Sysadmin Technology €7.000
400 Nisha Manager Marketing €9.500
500 Randy DBAadmin Technology €6.000
Standaard toont Awk elke regel in een bestand.dany@linux-4wlv:~> awk '{print;}' werknemers.txt
100 Thomas Manager Verkoop €5.000
200 Jason Developer Technology €5.500
300 Sanjay Sysadmin Technology €7.000
400 Nisha Manager Marketing €9.500
500 Randy DBAdmin Technology €6.000
In dit voorbeeld is geen zoekpatroon opgegeven. Waardoor de acties op alle regels worden uitgevoerd. De actie print zonder argumenten toont standaard de volledige regel. Waardoor het volledige bestand getoond wordt. De acties moeten binnen de haakjes staan.
dany@linux-4wlv:~> awk '/Thomas/
> /Nisha/' werknemers.txt
100 Thomas Manager Verkoop €5.000
400 Nisha Manager Marketing €9.500
Deze opdracht toont alle regels waarin 'Thomas' of 'Nisha' voorkomt. Het heeft twee zoekpatronen. Awk accepteert meerdere zoekpatronen, maar elk zoekpatroon (met eventuele acties) moet met een Return gescheiden worden.
Awk heeft een aantal ingebouwde plaatshouders. Elke record (regel) wordt bij de spaties opgesplitst en opgeslagen in $n plaatshouders. Indien de regel vier woorden heeft, zullen deze woorden in $1, $2, $3 en $4 opgeslagen worden. $0 bevat de volledige regel. NF is een ingebouwde plaatshouder waarin het aantal velden (woorden) van het record (regel) wordt opgeslagen.
dany@linux-4wlv:~>awk '{print $2,$5;}' werknemers.txt
Thomas €5.000 Jason €5.500 Sanjay €7.000 Nisha €9.500 Randy €6.000 dany@linux-4wlv:~>awk '{print $2,$NF;}' werknemers.txt
Thomas €5.000 Jason €5.500 Sanjay €7.000 Nisha €9.500 Randy €6.000
De plaatshouders $2 en $5 bevatten respectievelijk de naam en het salaris. Het salaris kan ook met $NF opgevraagd worden, want $NF stelt het laatste veld voor. De velden worden na elkaar weergegeven door gebruik te maken van een komma tussen de plaatshouders.
Awk heeft twee belangrijke patronen die door de twee sleutelwoorden BEGIN en END gespecificeerd worden.
Syntaxis:BEGIN { Acties} {ACTIE} # Actie voor elke regel in een bestand END { Acties } # zijn opmerkingen (commentaar) in Awk
Acties in de BEGIN sectie worden uitgevoerd voor de verwerking van de eerste regel van de invoer. Acties in de END sectie worden pas na het voltooien van de verwerking van alle regels uitgevoerd.
dany@linux-4wlv:~> awk 'BEGIN {print "Naam\tFunctie\tAfdeling\tSalaris";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Einde rapport\n-------------";
> }' werknemers.txt
Naam Functie Afdeling Salaris
Thomas Manager Verkoop €5.000
Jason Developer Technology €5.500
Sanjay Sysadmin Technology €7.000
Nisha Manager Marketing €9.500
Randy DBAdmin Technology €6.000
Einde rapport
-------------
Dit voorbeeld gebruikt een kop- en voetregel.
dany@linux-4wlv:~> awk '$1 >200' werknemers.txt
300 Sanjay Sysadmin Technology €7.000
400 Nisha Manager Marketing €9.500
500 Randy DBAdmin Technology €6.000
Het eerste veld bevat het id van de werknemer. Indien $1 groter is dan 200, toon dan de volledige regel (standaard actie).
De afdeling staat in het vierde veld, waardoor je $4 moet controleren op de tekst "Technology". Indien aanwezig wordt de regel getoond.
dany@linux-4wlv:~>awk '$4 ~/Technology/' werknemers.txt
200 Jason Developer Technology €5.500
300 Sanjay Sysadmin Technology €7.000
500 Randy DBAdmin Technology €6.000
De bewerking ~ vergelijkt de inhoud van de regel met de reguliere expressie. Bij een overeenkomst wordt de standaard actie (volledige regel tonen) uitgevoerd.
Eerst controleren we of de werknemer in de afdeling Technology werkt. Indien dit zo is, wordt in de actie de plaatshouder met de teller verhoogd. De teller wordt op nul gezet in de BEGIN sectie.
dany@linux-4wlv:~> awk 'BEGIN { count=0;}
> $4 ~ /Technology/ { count++; }
> END { print "Aantal werknemers in de Technology afdeling: ",count;}' werknemers.txt
Aantal werknemers in de Technology afdeling: 3
Op het einde van het proces, wordt de waarde van de teller count met het aantal werknemers in de afdeling Technology weergegeven.