Overzicht
Awk leest invoer als records (standaard: regels), splitst deze met een veldscheidingsteken (FS) en past vervolgens patroon/actie { ... } blokken toe om de gewenste uitvoer (OFS) te produceren. Veelvoorkomende toepassingen zijn het extraheren van kolommen, voorwaardelijk filteren, berekenen van sommen/gemiddelden en het converteren van formaten.
Belangrijke ingebouwde variabelen
Dit zijn de belangrijkste ingebouwde variabelen die invoer/uitvoergedrag en opmaak regelen.
- NR: Record (regel) nummer gelezen tot nu toe
- FNR: Recordnummer in het huidige bestand
- NF: Aantal velden in het huidige record
- FS: Invoer veldscheidingsteken (standaard spatie)
- OFS: Uitvoer veldscheidingsteken (standaard spatie)
- RS: Record scheidingsteken (standaard newline)
- ORS: Uitvoer record scheidingsteken (standaard newline)
Basisvorm
awk '패턴 { 액션 }' input.txt
awk -f program.awk input.txt
Geef het patroon/actieblok op één regel door, of geef een scriptbestand door met -f.
Belangrijke opties
Veelgebruikte opties in de praktijk, gegroepeerd per situatie. Inclusief gawk-compatibele opties.
1) Basisuitvoering/Invoer
2) Veld-/Variabeleoverdracht
3) Debugging/Compatibiliteit (gawk)
4) Help/Versie
Gegenereerde opdracht:
Probeer de opdrachtcombinaties.
Uitleg:
`awk` Voer het commando uit.
Combineer deze opties en voer de opdracht virtueel uit met de AI.
Veelgebruikte patronen
Kolommen extraheren
awk -F ':' '{ print $1, $3 }' /etc/passwd
Alleen het 1e en 3e veld, gescheiden door een dubbele punt, uitvoeren
Voorwaardelijk filteren
awk '$5 > 100 { print }' data.tsv
Alleen records uitvoeren waarvan de waarde van het 5e veld groter is dan 100
Aggregatievoorbeeld
awk '{ sum += $2 } END { print sum }' data.txt
Som van de tweede kolom
Variabeleoverdracht en opmaak
awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt
Stel OFS in op een komma en geef alleen specifieke sleutels weer
Praktische tips
Omdat het een regel-voor-regel stroomverwerking is, is de combinatie met pipes krachtig.
- Reguliere expressies kunnen worden gebruikt als veldscheidingsteken: -F '[,:\t]+'
- Programma's kunnen in delen worden geschreven met meerdere -e opties
- Lange scripts splitsen met -f en versiebeheer met Git
- Pas OFS/ORS dienovereenkomstig aan voor de uitvoeropmaak
- Voor grote invoer, vereenvoudig de pijplijn door alleen de minimaal benodigde taken te behouden