Awk is een scripttaal die gebruikt wordt voor het manipuleren van gegevens en het genereren van rapporten.De awk Commando programmeertaal vereist geen compileren, en staat de gebruiker toe om variabelen, numerieke functies, string functies en logische operators te gebruiken.
Awk is een hulpprogramma dat een programmeur in staat stelt om kleine maar effectieve programma ‘ s te schrijven in de vorm van statements die tekstpatronen definiëren waarnaar gezocht moet worden in elke regel van een document en de actie die moet worden ondernomen wanneer een overeenkomst binnen een regel wordt gevonden., Awk wordt meestal gebruikt voor het scannen en verwerken van patronen. Het doorzoekt een of meer bestanden om te zien of ze regels bevatten die overeenkomen met de opgegeven patronen en voert vervolgens de bijbehorende acties uit.
Awk wordt afgekort van de namen van de ontwikkelaars – Aho, Weinberger en Kernighan.
wat kunnen we doen met AWK ?
1. Awk-bewerkingen:
(A) scant een bestand regel voor regel
(b) splitst elke invoerregel in velden
(c) vergelijkt invoerregel/velden met patroon
(d) voert actie(s) uit op overeenkomende regels
2., Nuttig voor:
(A) gegevensbestanden transformeren
(b)geformatteerde rapporten produceren
3. Programmeerconstructies:
(A) uitvoerregels opmaak
(b) rekenkundige en tekenreeksen
(C) Conditionals en loops
syntaxis:
awk options 'selection _criteria {action }' input-file > output-file
opties:
-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument.-F fs : Use fs for the input field separator
Voorbeeldcommando ‘ S
voorbeeld:
overweeg het volgende tekstbestand als het invoerbestand voor alle gevallen hieronder.
$cat > employee.txt
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
1. Standaard gedrag van Awk: standaard wordt awk elke regel met gegevens uit het opgegeven bestand afgedrukt.,
$ awk '{print}' employee.txt
Output:
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
in het bovenstaande voorbeeld wordt geen patroon gegeven. Dus de acties zijn van toepassing op alle lijnen. Actie afdrukken zonder argument drukt standaard de hele regel af, zodat alle regels van het bestand zonder fouten worden afgedrukt.
2. Print de lijnen die overeenkomen met het gegeven patroon.
$ awk '/manager/ {print}' employee.txt
Output:
ajay manager account 45000varun manager sales 50000amit manager account 47000
in het bovenstaande voorbeeld drukt het awk Commando alle regel af die overeenkomt met de ‘manager’.
3., Een regel splitsen in Velden: voor elk record dat wil zeggen regel, splitst het awk Commando het record gescheiden door witruimte karakter standaard en slaat het op in de $n variabelen. Als de regel 4 woorden bevat, wordt deze opgeslagen in respectievelijk $1, $2, $3 en $4. Ook, $0 vertegenwoordigt de hele lijn.
$ awk '{print $1,$4}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
in het bovenstaande voorbeeld staan $1 en $4 respectievelijk voor naam en salaris velden.,
ingebouwde variabelen in Awk
De ingebouwde variabelen van Awk omvatten de veldvariabelen—$1, $2, $3, en zo verder — $0 is de hele regel) – die een regel tekst in afzonderlijke woorden of stukken genaamd velden breken.
NR: het commando NR houdt een actuele telling bij van het aantal invoerrecords. Onthoud dat records meestal lijnen zijn. Awk commando voert de patroon / actie statements een keer uit voor elke record in een bestand.
NF: NF-Commando houdt een telling bij van het aantal velden binnen het huidige invoerrecord.,
FS: het commando FS bevat het scheidingsteken dat wordt gebruikt om velden op de invoerregel te verdelen. De standaard is “witte ruimte”, wat betekent ruimte en tab tekens. FS kan opnieuw worden toegewezen aan een ander teken (meestal in BEGIN) om het scheidingsteken te wijzigen.
RS: de opdracht RS slaat het huidige recordscheidingsteken op. Aangezien standaard een invoerregel het invoerrecord is, is het standaard scheidingsteken van een record een nieuwe regel.
OFS: OFS-opdracht slaat het scheidingsteken voor uitvoervelden op, dat de velden scheidt wanneer Awk ze afdrukt. De standaard is een lege ruimte., Wanneer print verschillende parameters heeft gescheiden met komma ‘ s, zal het de waarde van OFS tussen elke parameter afdrukken.
ORS: ORS-opdracht slaat het scheidingsteken voor uitvoerrecords op, dat de uitvoerregels scheidt wanneer Awk ze afdrukt. De standaard is een newline teken. print voert automatisch de inhoud van OR ‘ s uit aan het einde van wat het wordt gegeven om af te drukken.,
voorbeelden:
gebruik van ingebouwde variabelen NR (regelnummer weergeven)
$ awk '{print NR,$0}' employee.txt
uitvoer:
1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000
in het bovenstaande voorbeeld drukt het awk-commando met NR alle regels samen met het regelnummer af.
gebruik van NF ingebouwde variabelen (laatste veld Weergeven)
$ awk '{print $1,$NF}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
in het bovenstaande voorbeeld staat $1 Voor naam en $NF voor salaris. We kunnen het salaris krijgen met $NF, waar $NF het laatste veld vertegenwoordigt.,
een ander gebruik van NR ingebouwde variabelen (Display Line van 3 tot 6)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
Output:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
Meer voorbeelden
Voor het gegeven tekstbestand:
$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3
1) om het eerste item af te drukken samen met het rijnummer(nr) gescheiden met ” – ” van elke regel in geeksforgeeks.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2) om de tweede rij/item van geeksforgeeks terug te geven.,est regel aanwezig zijn in het bestand:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) tellen de lijnen in het bestand:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) Afdrukken lijnen met meer dan 10 tekens:
$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3
7) Te zoeken/controleren voor elke tekenreeks in een specifieke kolom:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) Voor het afdrukken van de kwadraten van de eerste getallen van 1 tot n zeggen 6:
$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36
Dit artikel is bijgedragen door Anshika Goyal en Praveen Negi., Als je GeeksforGeeks leuk vindt en wil bijdragen, kun je ook een artikel schrijven met contribute.geeksforgeeks.org of mail uw artikel naar [email protected]. zie uw artikel verschijnen op de GeeksforGeeks hoofdpagina en help andere Geeks.