Overzicht
awk leest tekstbestanden regel voor regel, scheidt elke regel in velden en verwerkt deze volgens gespecificeerde regels. Het is een programmeertaal. De `-F` optie definieert de scheider die wordt gebruikt om deze velden te scheiden. Naast de standaard scheider, het spatiepunt, kunnen verschillende scheiders zoals komma's, dubbele punten, specifieke tekenreeksen of reguliere expressies worden gebruikt.
Belangrijkste kenmerken
- Definieer aangepaste veldscheiders
- Reguliere expressies kunnen als scheiders worden gebruikt
- Verwerk gestructureerde tekstgegevens zoals CSV- en logbestanden
- Eenvoudige gegevensextractie en -transformatie
Belangrijkste opties
Het awk-commando biedt verschillende opties, maar hier richten we ons op de belangrijkste optie voor veldscheiding, namelijk `-F`.
Veldscheiding
Gegenereerde opdracht:
Probeer de opdrachtcombinaties.
Uitleg:
`awk` Voer het commando uit.
Combineer deze opties en voer de opdracht virtueel uit met de AI.
Gebruiksvoorbeelden
Voorbeelden van het verwerken van verschillende soorten tekstgegevens met behulp van de `-F` optie.
Specifieke velden uit een CSV-bestand met komma's (,) als scheider uitvoeren
echo "apple,banana,cherry,date" > data.csv
awk -F',' '{print $1, $3}' data.csv
Voert het eerste en derde veld uit het bestand data.csv uit, gescheiden door komma's.
Gebruikersnaam en shell uit het /etc/passwd-bestand, gescheiden door dubbele punten (:), uitvoeren
awk -F':' '{print $1, $7}' /etc/passwd
Voert de gebruikersnaam (eerste veld) en de login-shell (zevende veld) uit het /etc/passwd-bestand uit.
Meerdere scheiders (spaties of tabs) specificeren met een reguliere expressie
echo "field1 field2\tfield3" > data.txt
awk -F'[ \t]+' '{print $1, $2}' data.txt
Herkent opeenvolgende spaties of tab-tekens als één scheider en voert het eerste en tweede veld uit. (Vergelijkbaar met standaardgedrag)
Een specifieke tekenreeks als scheider gebruiken
echo "Header---Content Body---Footer" > multi_line_data.txt
awk -F'---' '{print $1, $2}' multi_line_data.txt
Voert het eerste en tweede veld uit, waarbij de tekenreeks '---' in de invoer als veldscheider wordt gebruikt.
Het derde veld uitvoeren van regels waarvan het eerste veld een specifieke waarde heeft
echo "root:x:0:0:root:/root:/bin/bash\nuser:x:1000:1000:user:/home/user:/bin/bash" > users.txt
awk -F':' '$1 == "root" {print $3}' users.txt
Zoekt alleen naar regels waarvan het eerste veld 'root' is in een bestand gescheiden door dubbele punten en voert het derde veld uit.
Tips & Aandachtspunten
Handige tips en aandachtspunten bij het gebruik van awk -F.
Reguliere expressie scheider
De scheider die aan de `-F` optie wordt doorgegeven, wordt geïnterpreteerd als een reguliere expressie. Daarom moeten speciale tekens zoals `.` of `*` worden geëscaped met `\.` of `\*` om ze als letterlijke tekens te gebruiken.
- Voorbeeld: `awk -F'\.' '{print $1}' filename` (gebruikt punt (.) als scheider)
- Voorbeeld: `awk -F'[[:space:]]+' '{print $1}' filename` (gebruikt alle spaties als scheider)
Interne variabele FS (Field Separator)
De `-F` optie is hetzelfde als het instellen van de interne variabele `FS`. U kunt de scheider binnen het script dynamisch regelen door `FS` in het `BEGIN` blok in te stellen.
- Voorbeeld: `awk 'BEGIN {FS=","} {print $1}' data.csv`
Output Field Separator (OFS)
Afzonderlijk van de invoer veldscheider (`FS`), kunt u de scheider tussen de velden die worden uitgevoerd met de `print` instructie specificeren door de `OFS` (Output Field Separator) variabele in te stellen. De standaardwaarde is een spatie.
- Voorbeeld: `awk -F',' 'BEGIN {OFS=":"} {print $1, $3}' data.csv` (gebruikt dubbele punt in plaats van komma bij uitvoer)