Startpagina > Tekstverwerking en zoeken > awk

awk -F: Veldscheider specificeren

awk is een krachtig tekstverwerkingshulpmiddel dat wordt gebruikt om specifieke patronen in bestanden of streams te vinden, te verwerken en gegevens te manipuleren. Met name de `-F` optie specificeert de scheider (delimiter) die de velden van de invoerrecords scheidt, waardoor complexe gegevensstructuren eenvoudig kunnen worden geparseerd en gewenste velden kunnen worden geëxtraheerd of gemanipuleerd. Dit is een essentiële functie bij het werken met verschillende soorten gestructureerde tekstgegevens, zoals CSV- en logbestanden.

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)

Hétzelfde categoriecommando