Articles

awk scripting uitgelegd met praktische voorbeelden

Posted on

Awk commando / tool wordt gebruikt om tekst rijen en kolommen in een bestand te manipuleren. Awk heeft ingebouwde string functies en associatieve arrays. Awk ondersteunt de meeste operatoren, voorwaardelijke blokken en beschikbaar in de C-taal. awk scripting

awk scripting

Een van de goede dingen is dat we awk commando samen met andere commando’s kunnen gebruiken om de gewenste uitvoer te bereiken. We kunnen ook awk script omzetten naar perl.

Basissystax van awk: ‘BEGIN {start_action} {action} END {stop_action}’ file_name

Hier staan de acties

  • Begin blok wordt uitgevoerd voor het bestand
  • End blok wordt uitgevoerd na het verwerken van het bestand
  • De rest van de acties wordt uitgevoerd tijdens het verwerken van het bestand

Voorbeelden: Maak een bestand met naam test onderstaande gegevens erin

# cat test

U kunt uit bovenstaande gegevens opmaken dat bestand rijen en kolommen heeft, gescheiden door spaties en rijen zijn nieuwe regels. Om dit artikel uit te leggen, gaan we een testbestand gebruiken voor een paar voorbeelden.

Commando Syntax: awk ‘{print $3}’ test

Hier heeft $3 de betekenis print 3e kolom van alle kolommen uit het testbestand. Als u meerdere kolommen wilt afdrukken, vermeld dan de kolomnamen gescheiden door komma’s $1,$2,$3….. hieronder is de uitvoer die als 3e kolom in alle rijen

# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr

Om de 4e en 6e kolom in een bestand af te drukken gebruikt u awk ‘{print $4,$6}’ test

Hier worden de begin- en eindblokken niet gebruikt in awk. Dus, het afdruk-commando wordt uitgevoerd voor elke rij die het leest uit het bestand. In het volgende voorbeeld zullen we zien hoe we begin- en eindblokken kunnen gebruiken.

Print som van de kolomwaarde

Commando Syntax: awk ‘BEGIN {sum=0} {sum=sum+$7} END {print sum}’ test

Het bovenstaande voorbeeld drukt de som af van de waarde in de 7e kolom. In het begin blok wordt de variabele som toegewezen met waarde 0. In het volgende blok wordt de waarde van de 7e kolom toegevoegd aan de variabele som. Deze toevoeging van de 7e kolom aan de som variabele wordt herhaald voor elke rij die verwerkt is. Wanneer alle rijen zijn verwerkt zal de som variabele de som van de waarden in de 7e kolom bevatten. Deze waarde wordt afgedrukt in het End blok zoals hieronder te zien is:

# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300

Som van kolom waarde met behulp van awk script

In het 2e voorbeeld hebben we gezien hoe we de 7e waarde van de kolom kunnen sommeren, op dezelfde manier in plaats van in één regel schrijven we het als script. Maak een bestand sumofcolumn en plak onderstaand script in dat bestand

#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}

Uit nu het script met awk commando zoals hieronder getoond

# awk -f sumofcolumn test300

Dit zal het script in sumofcolumn bestand uitvoeren en geeft de som van de 7e kolom in de test weer.

Vind string en print overeenkomstige regel

Commando Syntax: awk ‘{if($9 == “arkit”) print $0;}’ test

Het bovenstaande voorbeeld controleert op de string “arkit” in de 3e kolom en als het een overeenkomst vindt, wordt de hele regel afgedrukt. De uitvoer van dit awk commando is hieronder

# awk '{ if($3 == "arkit") print $0;}' test

Voor lus met vermenigvuldiging van genoemde waarde vermeerderd met +1

Commando Syntax: awk ‘BEGIN { for(i=1;i<=10;i++) print “Vermenigvuldigde waarde van”, i, “is”,i*i; }’

Het bovenstaande commando zal de vermenigvuldiging van de eerste getallen van 1 tot 10 printen. i++ zal +1 toevoegen aan het getal zodat het blijft stijgen tot 10. De uitvoer van het commando is hieronder

# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1

6. Invoerveld scheidingsteken

Je hebt al $0,$1,$2.. gezien die de hele regel, eerste kolom, tweede kolom.. respectievelijk afdrukken. Nu zullen we andere ingebouwde variabelen met voorbeelden bekijken.

Op basis van ons voorbeeldbestand hebben we kolommen die worden gescheiden door een spatie, maar in plaats van een spatie kun je ook andere symbolen zoals .d.w.z. : , – gebruiken om te scheiden en af te drukken.

Voorbeeld als u : (dubbele punt) als scheidingsteken hebt, gebruik dan het volgende

awk ‘BEGIN {FS=”:”} {print $2}’ test

Of

awk -F: ‘{print $2}’ test

Dit drukt de uitvoer af zoals hieronder

# awk -F: '{print $2}' test41 file12

OFS – Uitvoerveldscheidingsteken variabele

Als we de velden afdrukken met het print statement, worden de velden standaard weergegeven met spaties als scheidingsteken. Bijvoorbeeld

Commando syntax: awk ‘{print $4,$5}’ test

# awk '{print $4,$5}' testroot 0

We kunnen dit standaard gedrag veranderen door OFS variabele te gebruiken als

Commando syntax: awk ‘BEGIN {OFS=”:”} {print $4,$5}’ test

# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0

Note: print $4,$5 en print $4$5 zullen niet op dezelfde manier werken. De eerste geeft de uitvoer weer met spaties als scheidingsteken. De tweede geeft de uitvoer weer zonder enig scheidingsteken.

NF – Aantal velden tellen

NF kan worden gebruikt om het aantal velden in elke regel te weten hieronder staat een voorbeeld van een commando

# awk '{print NF}' test9

NR – aantal records tellen

NR kan worden gebruikt om het regelnummer of het aantal regels in een bestand te weten

# awk '{print NR}' test12345678910

Het bovenstaande voorbeeld zal het regelnummer afdrukken, in een testbestand hebben we tien regels.

Aantal records in bepaald bestand afdrukken

Als u bovenstaand voorbeeld van de 9e sectie ziet, worden alle regelnummers afgedrukt, maar ik wil alleen het aantal records zien.

# awk 'END {print NR}' test10

Hiermee wordt het totale aantal regels in het testbestand weergegeven.

String functies in Awk:

Een aantal van de string functies in awk zijn:

  • index(string,zoek)
  • length(string)
  • split(string,array,separator)
  • substr(string,positie)
  • substr(string,positie,max)
  • tolower(string)
  • toupper(string)

Geavanceerde voorbeelden:

Filtering lines using Awk split function

De awk split functie splitst een string in een array met behulp van het scheidingsteken.

De syntaxis van de split functie is
split(string, array, delimiter)

Nu zullen we zien hoe we de regels kunnen filteren met behulp van de split functie met een voorbeeld.

De invoer “advanced.txt” bevat de gegevens in het volgende formaat

# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444

Gevraagde uitvoer: Nu moeten we alleen de regels afdrukken waarin die 2e veld de string “ARKIT” als 3e veld heeft.

The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222

Het awk commando voor het verkrijgen van de output staat hieronder vermeld

Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222

Weinig awk commando / tool voorbeelden zullen we zien in komende post Stay tune.

Keywords: awk scripting in linux,hoe voer je een awk script uit in linux,hoe schrijf je een awk script in linux,awk in linux bash,awk in linux commando,awk script voorbeelden linux,awk in linux voorbeeld,awk in linux betekent,awk in linux pdf,awk in linux programmeren,awk in linux ppt,awk in linux shell script,awk commando in linux shell scripting,awk in linux tutorial,awk in linux terminal,awk in linux met voorbeelden,awk scripting,awk scripting,awk scripting,awk scripting,awk scripting

Dank voor het lezen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *