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.