Awk är ett skriptspråk som används för att manipulera data och generera rapporter.Programmeringsspråket awk command kräver ingen sammanställning och tillåter användaren att använda variabler, numeriska funktioner, strängfunktioner och logiska operatörer.
Awk är ett verktyg som gör det möjligt för en programmerare att skriva små men effektiva program i form av uttalanden som definierar textmönster som ska sökas efter i varje rad i ett dokument och den åtgärd som ska vidtas när en match finns inom en rad., Awk används oftast för mönsterskanning och bearbetning. Den söker en eller flera filer för att se om de innehåller rader som matchar de angivna mönstren och sedan utför de associerade åtgärderna.
Awk förkortas från utvecklarens namn – Aho, Weinberger och Kernighan.
VAD KAN VI GÖRA MED AWK ?
1. AWK-operationer:
(a) skannar en filrad efter rad
(b) delar varje inmatningsrad i fält
(c) jämför inmatningsrad/fält till mönster
(d) utför åtgärder på matchade linjer
2., Användbart för:
(a) omvandla datafiler
(b) producera formaterade rapporter
3.
(a) format utdatalinjer
(b) aritmetiska och sträng operationer
(C) Villkor och loopar
Syntax:
awk options 'selection _criteria {action }' input-file > output-file
alternativ:
-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
exempelkommandon
exempel:
Tänk på följande textfil som indatafil:
-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
för alla fall nedan.
$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. Standardbeteende för Awk: som standard skriver Awk ut varje rad data från den angivna filen.,
$ 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
i exemplet ovan ges inget mönster. Så åtgärderna är tillämpliga på alla rader. Action print utan argument skriver ut hela raden som standard, så det skriver ut alla rader i filen utan fel.
2. Skriv ut de linjer som matchar det givna mönstret.
$ awk '/manager/ {print}' employee.txt
Output:
ajay manager account 45000varun manager sales 50000amit manager account 47000
i exemplet ovan skriver kommandot awk ut alla rader som matchar ”manager”.
3., Dela upp en rad i fält: för varje post dvs rad delar awk-kommandot posten avgränsad av blanktecken som standard och lagrar den i $n-variablerna. Om linjen har 4 ord kommer den att lagras i $1, $2, $ 3 respektive $ 4. Dessutom representerar $ 0 hela linjen.
$ awk '{print $1,$4}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
i ovanstående exempel representerar $1 respektive $4 Namn-och Lönefält.,
inbyggda variabler i Awk
Awk: s inbyggda variabler inkluderar fältvariablerna—$1, $2, $3, och så vidare — $ 0 är hela raden) – som bryter en textrad i enskilda ord eller bitar som kallas fält.
nr: kommandot NR håller ett aktuellt antal indataposter. Kom ihåg att poster är vanligtvis rader. Awk kommandot utför mönster / åtgärd uttalanden en gång för varje post i en fil.
NF: NF-kommandot räknar antalet fält i den aktuella inmatningsposten.,
FS: FS-kommandot innehåller fältavgränsningskaraktär som används för att dela upp fält på inmatningsraden. Standardvärdet är ”white space”, vilket betyder mellanslag och fliktecken. FS kan omplaceras till ett annat tecken (vanligtvis i början) för att ändra fältseparator.
RS: rs kommandot lagrar det aktuella postseparator tecknet. Eftersom en inmatningsrad som standard är indataposten är standardpostseparatorn ett nytt tecken.
OFS: OFS-kommandot lagrar utmatningsfältseparator, som skiljer fälten när Awk skriver ut dem. Standard är ett tomt utrymme., När print har flera parametrar separerade med kommatecken, kommer det att skriva ut värdet av OFS mellan varje parameter.
ORS: ORS kommandot lagrar utmatningspostseparatorn, som separerar utmatningslinjerna när Awk skriver ut dem. Standardvärdet är ett nytt tecken. Skriv ut matar automatiskt ut innehållet i ORS i slutet av vad det ges för att skriva ut.,
exempel:
användning av NR inbyggda variabler (display Line Number)
$ awk '{print NR,$0}' employee.txt
utgång:
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
i ovanstående exempel skriver awk-kommandot med NR ut alla linjer tillsammans med linjenumret.
användning av NF inbyggda variabler (visa senaste fält)
$ awk '{print $1,$NF}' employee.txt
utgång:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
i ovanstående exempel representerar $1 Namn och $NF representerar lön. Vi kan få lönen med $NF, där $NF representerar sista fältet.,
en annan användning av NR inbyggda variabler (visningslinje från 3 till 6)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
utgång:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
fler exempel
för den givna textfilen:
$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3
1) för att skriva ut det första objektet tillsammans med radnumret(nr) separerat med ” – ” från varje rad i geeksforgeeks.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2) för att returnera den andra raden/objektet från geeksforgeeks.,i filen:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) för att räkna raderna i en fil:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) skriva ut rader med mer än 10 tecken:
$ awk 'END { print NR }' geeksforgeeks.txt
3
”30c1b2fb5b”>
Tarun A12 1Praveen M42 3
7) för att hitta/kontrollera efter en sträng i en specifik kolumn:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) för att skriva ut rutorna på första nummer från 1 till n säga 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
denna artikel har bidragit med anshika Goyal och Praveen Negi., Om du gillar GeeksforGeeks och vill bidra, kan du också skriva en artikel med contribute.geeksforgeeks.org eller maila din artikel till [email protected]. se din artikel som visas på GeeksforGeeks huvudsida och hjälpa andra nördar.