Hoe beheer je de AWK-opdracht om teksten onder Linux te verwerken?

De AWK-opdracht is een krachtig en veelzijdig hulpmiddel voor het verwerken en transformeren van tekstgegevens in Linux. Of u nu informatie extraheert, rijen filtert, uitvoer opnieuw formatteert of berekeningen uitvoert, AWK kan uw leven gemakkelijker maken met slechts een paar regels code. In dit artikel leert u hoe u de AWK-opdracht kunt gebruiken voor tekstmanipulatie in Linux.

Wat is het AWK-commando?

De AWK-programmeertaal.svg

De AWK-opdracht is een geïnterpreteerde programmeertaal die wordt uitgevoerd in de Linux-terminal. De naam komt van de initialen van de makers: Alfred Aho, Peter Weinberger en Brian Kernighan. AWK is oorspronkelijk ontworpen om bestanden te verwerken die zijn gestructureerd in velden, gescheiden door scheidingstekens, zoals CSV-bestanden of /etc/passwd-bestanden. Maar AWK kan ook overweg met complexere tekstbestanden, zoals HTML- of XML-bestanden. AWK is geen objectgeoriënteerde programmeertaal , maar u kunt er wel lokale of globale functies en variabelen mee definiëren. Het heeft ook controlestructuren zoals lussen en voorwaarden.

De algemene syntaxis van de AWK-opdracht is als volgt:

awk [opties] 'programma' [bestanden]

Het programma bestaat uit een reeks instructies die patronen definiëren waarnaar moet worden gezocht in elke regel van het bestand en acties die moeten worden uitgevoerd wanneer een patroon wordt gevonden. de opties kunt u het gedrag van de AWK-opdracht wijzigen, zoals de keuze van het veldscheidingsteken of het uitvoerformaat.

Hoe tekst afdrukken met de AWK-opdracht?

Hoe het Awk-commando op Linux te gebruiken

Het AWK-commando kan worden gebruikt om een ​​bericht naar de terminal af te drukken op basis van een patroon in de tekst. Als u de AWK-opdracht zonder enige reden en alleen met een afdrukopdracht uitvoert, drukt AWK het bericht af elke keer dat u op Enter drukt.

Als u bijvoorbeeld typt:

awk '{print "Hallo"}'

En als je meerdere keren op Enter drukt, krijg je:

Goedemorgen, goedemorgen, goedemorgen

Om de AWK-opdracht te stoppen, kunt u op Ctrl+C drukken.

BEGIN gebruiken , dat wordt uitgevoerd voordat het bestand wordt gelezen, en het END , dat wordt uitgevoerd nadat het bestand is gelezen. Als u bijvoorbeeld een bestand met de naam test.txt dat het volgende bevat:

Dit is een test. AWK is een geweldig hulpmiddel. Linux is het beste besturingssysteem

U kunt de inhoud van het bestand afdrukken met de volgende opdracht:

awk 'BEGIN {print "Hier is de inhoud van het test.txt-bestand:"} {print} END {print "Einde van bestand"}' test.txt

Welke geven:

Hier is de inhoud van het test.txt-bestand: Dit is een test AWK is een geweldig hulpmiddel Linux is het beste besturingssysteem Einde van het bestand

commando {print} zonder argumenten wordt de hele regel afgedrukt. U kunt ook een specifiek veld afdrukken met de $n , waarbij n het veldnummer is. Standaard worden velden gescheiden door spaties of tabs, maar u kunt het scheidingsteken wijzigen met de -F .

Als u bijvoorbeeld de eerste en derde velden van het /etc/passwd , gescheiden door een dubbele punt ( :) , kunt u de volgende opdracht gebruiken:

awk -F: '{print $1 " " $3}' /etc/passwd

Wat zoiets oplevert als:

root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 nieuws 9 uucp 10 proxy 13 www-data 33 ...

Met de opdracht AWK kunt u ook rekenkundige uitdrukkingen of tekenreeksen afdrukken. test.txt- wilt afdrukken , kunt u de volgende opdracht gebruiken:

awk '{print $2^2}' test.txt

Welke geven:

is 16 u

Als u het aantal regels in het test.txt- , kunt u de speciale variabele NR , die het nummer van de huidige regel bevat. U kunt bijvoorbeeld de volgende opdracht gebruiken:

awk 'END {print NR}' test.txt

Welke geven:

3

Hoe tekst filteren met de AWK-opdracht?

dl.beatsnoop.com duim 1687289446

Het AWK-commando kan worden gebruikt om tekst te filteren op basis van patronen of voorwaarden. Als u vóór een actie een patroon opgeeft, voert AWK de actie alleen uit als het patroon in de rij wordt gevonden. Het patroon kan een reguliere expressie, een vergelijking, een logische bewerking of een combinatie hiervan zijn.

Als u bijvoorbeeld regels uit het test.txt- die het woord Linux , kunt u de volgende opdracht gebruiken:

awk '/Linux/ {print}' test.txt

Welke geven:

Linux is het beste besturingssysteem

/etc/passwd- wilt afdrukken die een UID groter dan 1000 hebben, kunt u de volgende opdracht gebruiken:

awk -F: '$3 > 1000 {print}' /etc/passwd

Wat zoiets oplevert als:

systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:TPM-softwarestack,,,:/var/lib/tpm:/bin/false _rpc: x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139: Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

U kunt ook de logische operatoren && (en), || (of) en ! (nee) om patronen te combineren. Als u bijvoorbeeld regels uit het /etc/passwd- die een UID groter dan 1000 hebben en een andere shell dan /usr/sbin/nologin , kunt u de volgende opdracht gebruiken:

awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {print}' /etc/passwd

Kopiëren

Wat zoiets oplevert als:

tss:x:131:142:TPM-softwarestack,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x: 133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq :x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

Hoe tekst bewerken met de AWK-opdracht?

dl.beatsnoop.com duim 1687289615

Het AWK-commando kan worden gebruikt om tekst te wijzigen met behulp van ingebouwde functies of speciale variabelen. Als u bijvoorbeeld spaties in het test.txt , kunt u de gsub , die alle exemplaren van de ene tekenreeks door een andere vervangt. U kunt ook de speciale OFS- , die het uitvoerveldscheidingsteken definieert. U kunt bijvoorbeeld de volgende opdracht gebruiken:

awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt

Welke geven:

30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51

U kunt de AWK-opdrachthandleiding raadplegen voor andere beschikbare functies en variabelen.

Hoe gebruik je een for-lus met het AWK-commando?

De opdracht AWK kan worden gebruikt om lussen uit te voeren over velden of regels in een bestand. De syntaxis van de for-lus is als volgt:

voor (variabele in array) actie

Waar variabele de naam is van de variabele die achtereenvolgens de waarden uit de array , en actie de actie is die in elke iteratie moet worden uitgevoerd.

Als u bijvoorbeeld de velden van een bestand in omgekeerde volgorde wilt afdrukken, kunt u de for-lus gebruiken met de speciale variabele NF , die het aantal velden op de huidige regel bevat. Als u bijvoorbeeld een test.txt- dat het volgende bevat:

Dit is een test. AWK is een geweldig hulpmiddel. Linux is het beste besturingssysteem

U kunt de volgorde van de velden omkeren met het volgende commando:

awk '{for (i=NF; i>0; i--) print $i}' test.txt

Welke geven:

test één is Deze geweldige tool, één is het AWK-besturingssysteem, het beste is Linux
dl.beatsnoop.com duim 1687289757

U kunt ook de for-lus gebruiken om door de regels van een bestand te itereren met de speciale FNR- , die het regelnummer bevat dat betrekking heeft op het huidige bestand. Als u bijvoorbeeld de even regelnummers van het test.txt , kunt u de volgende opdracht gebruiken:

awk 'FNR%2==0 {print FNR}' test.txt

Welke geven:

2
4

Hoe voer ik een AWK-script uit?

extensie .awk en het uitvoeringsrechten geven met de chmod +x . Vervolgens kunt u het script uitvoeren met de opdracht ./script_name.awk [files] .

Als u bijvoorbeeld een script heeft met de naam hello.awk dat het volgende bevat:

#!/usr/bin/awk -f BEGIN {print "Hallo"}

U kunt het script uitvoeren met de volgende opdracht:

./hallo.awk

Welke geven:

Hallo

Hoe geef ik argumenten door aan een AWK-script?

dl.beatsnoop.com duim 1687289922

Om argumenten door te geven aan een AWK-script, kunt u twee methoden gebruiken:

  • De eerste methode is om de -v met het variabele=waarde . Als u bijvoorbeeld twee argumenten met de namen var1 en var2 aan uw hello.awk- , kunt u de volgende opdracht gebruiken:
awk -v var1=hallo -v var2=wereld -f hallo.awk 

En in je hello.awk- heb je toegang tot de argumenten met variabelen $var1 en $var2 . Als uw script bijvoorbeeld het volgende bevat:

#!/usr/bin/awk -f BEGIN {print $var1 " " $var2}

Je verkrijgt:

Bonjour Mondé
  • De tweede methode is het gebruik van de speciale ARGV- , die de argumenten bevat die aan het script zijn doorgegeven. hello.awk wilt doorgeven , kunt u de volgende opdracht gebruiken:
awk -f hallo.awk hallo wereld 

En in je hello.awk ARGV[1] en ARGV[2] indices . Als uw script bijvoorbeeld het volgende bevat:

#!/usr/bin/awk -f BEGIN {print ARGV[1] " " ARGV[2]}

Je verkrijgt:

Bonjour Mondé

Veelgestelde vragen

Wat is het verschil tussen AWK en GAWK?

GAWK is een GNU-implementatie van AWK, die extra functies toevoegt aan de originele taal, zoals ondersteuning voor uitgebreide reguliere expressies, multidimensionale arrays of vooraf gedefinieerde functies.

Hoe debug je een AWK-script?

sporen -W gebruiken lintparameter , die waarschuwingsberichten weergeeft over mogelijke fouten in het script. -W gebruiken met de dump-variables , die de variabelewaarden weergeeft aan het einde van de scriptuitvoering.

Hoe gebruik ik de AWK-opdracht om gegevens te sorteren?

Om de AWK-opdracht te gebruiken om gegevens te sorteren, kunt u de sorteeropdracht in combinatie met AWK. Als u bijvoorbeeld gebruikers in het /etc/passwd op hun UID's, kunt u de volgende opdracht gebruiken:

awk -F: '{print $1, $3}' /etc/passwd | sorteer -n -k2 

Door AWK te combineren met andere commando's (hier sort ), kun je gemakkelijk veel verder gaan in het weergeven en organiseren van gegevens.

Hoe kan ik het aantal woorden van een bestand afdrukken met het AWK-commando?

Om het aantal woorden in een bestand af te drukken met het AWK-commando, kunt u de speciale variabele NF , die het aantal velden op de huidige regel bevat, en de speciale variabele NR , die het nummer van de huidige regel bevat. Met behulp van een for-lus kunt u het aantal woorden in elke regel tellen en deze aan een totaalvariabele . Met behulp van het speciale patroon END kunt u het eindresultaat afdrukken. Als u bijvoorbeeld een bestand met de naam test.txt dat het volgende bevat:

Dit is een test. AWK is een geweldig hulpmiddel. Linux is het beste besturingssysteem

U kunt het aantal woorden van het bestand afdrukken met de volgende opdracht:

awk '{for (i=1; i<=NF; i++) totaal++} END {printtotaal}' test.txt

Welke geven:

9

Hoe gebruik ik de AWK-opdracht om gegevens uit een CSV-bestand te extraheren?

Om de AWK-opdracht te gebruiken om gegevens uit een bestand met door komma's gescheiden waarden (CSV) te extraheren, kunt u de -F om het veldscheidingsteken in te stellen op een komma. Als u bijvoorbeeld een bestand met de naam test.csv dat het volgende bevat:

naam, voornaam, leeftijd Alice, Dupont, 25 Bob, Martin, 32 Charles, Durand, 28

U kunt de naam en leeftijd van mensen extraheren met de volgende opdracht:

awk -F"," '{print $1 " " $3}' test.csv

Welke geven:

naam leeftijd Alice 25 Bob 32 Charles 28

Hoe gegevens filteren met de AWK-opdracht?

Met de opdracht AWK kunt u gegevens filteren op basis van patronen, dit zijn reguliere expressies of logische voorwaarden. Patronen worden vóór acties geplaatst, gescheiden door accolades. Als u bijvoorbeeld regels in het test.csv- Alice bevatten , kunt u het volgende patroon gebruiken:

awk -F"," '/Alice/ {print}' test.csv

Welke geven:

Alice, Dupont, 25

test.csv- regels wilt weergeven die ouder zijn dan 30 jaar, kunt u het volgende patroon gebruiken:

awk -F"," '$3 > 30 {print}' test.csv

Welke geven:

Bob,Martin,32

U kunt meerdere patronen combineren met de logische operatoren && (en), || (of) en ! (Neen). Als u bijvoorbeeld regels in het test.csv die een naam hebben die begint met C of die jonger zijn dan 10 jaar, kunt u het volgende patroon gebruiken:

awk -F"," '($1 ~ /^C/) || ($3 < 10) {print}' test.csv 

Welke geven:

CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7

Hoe statistieken berekenen met de AWK-opdracht?

Met de opdracht AWK kunt u statistieken berekenen over numerieke gegevens in een bestand, zoals som, gemiddelde, minimum of maximum. Om dit te doen, gebruikt u eenvoudigweg variabelen om tussenwaarden op te slaan en deze op elke regel bij te werken. Met behulp van het speciale END- kunnen we het eindresultaat weergeven. test.csv wilt berekenen , kunt u het volgende programma gebruiken:

awk -F"," 'NR>1 {som+=$3; count++} END {print "Som: " som; print 'Gemiddelde: 'som/aantal}' test.csv 

Welke geven:

Som: 110 Gemiddeld: 18,3333

Uitleg:

  • We gebruiken de -F", om het veldscheidingsteken als komma te definiëren.
  • We gebruiken de voorwaarde NR>1 om de eerste regel van het bestand, die de kolomnamen bevat, te negeren.
  • We gebruiken de som- en telvariabelen om de som en het aantal leeftijden te accumuleren. We gebruiken de += om de variabelen te verhogen met de waarde van het derde veld ( $3 ).
  • We gebruiken het END- om het eindresultaat weer te geven. We gebruiken de / om het gemiddelde te berekenen door de som te delen door het getal.

kunt u het volgende programma gebruiken test.csv wilt berekenen

awk -F"," 'NR>1 {if (min=="") min=max=$3; als ($3 max) max=$3} END {print "Min: " min; print 'Max: 'max}' test.csv 

Welke geven:

Min: 6 Max: 32

Uitleg:

  • We gebruiken de -F", om het veldscheidingsteken als komma te definiëren.
  • We gebruiken de voorwaarde NR>1 om de eerste regel van het bestand, die de kolomnamen bevat, te negeren.
  • We gebruiken de min- en max om de minimum- en maximumleeftijden op te slaan. We initialiseren deze variabelen met de waarde van het derde veld ( $3 ) als ze leeg zijn ( "" ). We gebruiken de < en > om waarden te vergelijken en indien nodig variabelen bij te werken.
  • We gebruiken het END- om het eindresultaat weer te geven.

Conclusie

Het AWK-commando is een essentieel hulpmiddel voor het manipuleren van teksten onder Linux. Hiermee kunt u complexe taken uitvoeren in een paar regels code, zoals het extraheren, filteren, wijzigen of berekenen van gegevens. Het biedt grote flexibiliteit dankzij de patronen, acties, functies en variabelen. Het kan worden gecombineerd met andere Linux-opdrachten om de mogelijkheden ervan uit te breiden. U kunt bijvoorbeeld de opdracht Echo op Windows om een ​​bericht of variabele op het scherm weer te geven. Als u meer wilt weten over het AWK-commando, kunt u de handleiding of de vele tutorials raadplegen die op internet beschikbaar zijn.

Vorig artikel Hoe beveiligt u uw bestandsoverdracht met FTPS op Windows Server?
Volgend artikel Hoe krijg ik gratis YouTube Premium?
Hallo ik, het is François :) Redacteur in mijn vrije tijd die graag zijn passie deelt: TT High tech! 😍 Of het nu gaat om hardware, software, videogames, sociale media en vele andere gebieden op de site. Ik deel mijn analyses, mijn tests, tutorials en mijn favorieten op verschillende media met je. Ik ben een deskundige en veeleisende technofiel, die niet alleen de mode volgt, maar u ook naar de beste oplossingen wil begeleiden. Dus blijf op de hoogte!