20 awk exempel

20 Awk Examples



Många verktyg finns i Linux -operativsystemet för att söka och generera en rapport från textdata eller filer. Användaren kan enkelt utföra många typer av sökning, ersättning och rapportgenererande uppgifter med hjälp av kommandon awk, grep och sed. awk är inte bara ett kommando. Det är ett skriptspråk som kan användas från både terminal- och awk -fil. Den stöder variabeln, villkorligt uttalande, array, loopar etc. som andra skriptspråk. Den kan läsa vilket filinnehåll som helst rad för rad och separera fälten eller kolumnerna baserat på en specifik avgränsare. Det stöder också vanligt uttryck för att söka efter en särskild sträng i textinnehållet eller filen och vidtar åtgärder om någon matchning hittas. Hur du kan använda kommandot och skriptet awk visas i denna handledning med 20 användbara exempel.

Innehåll:

  1. awk med printf
  2. awk att dela på vitt utrymme
  3. okej att ändra avgränsaren
  4. awk med flikavgränsade data
  5. awk med csv -data
  6. okej regex
  7. awk okänslig regex
  8. awk med variabeln nf (antal fält)
  9. awk gensub () -funktion
  10. awk med rand () -funktion
  11. awk användardefinierad funktion
  12. ock om
  13. awk -variabler
  14. awk -matriser
  15. awk loop
  16. awk för att skriva ut den första kolumnen
  17. awk för att skriva ut den sista kolumnen
  18. awk med grep
  19. awk med bash -skriptfilen
  20. awk med sed

Använda awk med printf

printf () funktionen används för att formatera alla utdata i de flesta programmeringsspråk. Denna funktion kan användas med ock kommando för att generera olika typer av formaterade utgångar. kommandot awk används främst för alla textfiler. Skapa en textfil med namnet medarbetare.txt med innehållet nedan, där fält separeras med flik (‘ t’).







medarbetare.txt



1001 John sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Liver 70000

Följande awk -kommando läser data från medarbetare.txt fil rad för rad och skriv ut den första arkiverade efter formatering. Här, %10s n betyder att utmatningen kommer att vara 10 tecken lång. Om värdet på utdata är mindre än 10 tecken läggs mellanslag till längst fram i värdet.



$ awk'{printf'%10s n', $ 1}'anställd.Text

Produktion:





Gå till Innehåll



awk att dela på vitt utrymme

Standardordet eller fältavgränsaren för att dela upp text är vitt utrymme. kommandot awk kan ta textvärde som inmatning på olika sätt. Inmatningstexten skickas från kastade ut kommando i följande exempel. Texten, ' Jag gillar att programmera 'Kommer att delas som standardavgränsare, Plats , och det tredje ordet kommer att skrivas ut som utmatning.

$kastade ut 'Jag gillar att programmera' | ock '{print $ 3}'

Produktion:

Gå till Innehåll

okej att ändra avgränsaren

kommandot awk kan användas för att ändra avgränsaren för vilket filinnehåll som helst. Anta att du har en textfil med namnet phone.txt med följande innehåll där ‘:’ används som fältavgränsare för filinnehållet.

phone.txt

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Kör följande awk -kommando för att ändra avgränsaren, ':' förbi '-' till innehållet i filen, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Produktion:

Gå till Innehåll

awk med flikavgränsade data

kommandot awk har många inbyggda variabler som används för att läsa texten på olika sätt. Två av dem är FS och OFS . FS är inmatningsfältavskiljare och OFS är utmatningsfältavskiljarvariabler. Användningen av dessa variabler visas i detta avsnitt. Skapa en flik separerad fil namngiven input.txt med följande innehåll att testa användningen av FS och OFS variabler.

Input.txt

Skriptspråk på klientsidan
Skriptspråk på serversidan
Databaserver
Webbserver

Använda FS -variabel med flik

Följande kommando kommer att dela upp varje rad av input.txt fil baserad på fliken (‘ t’) och skriv ut det första fältet på varje rad.

$ock '{print $ 1}' FS='t'input.txt

Produktion:

Använda OFS -variabel med flik

Följande awk -kommando kommer att skriva ut 9th och 5th fält av 'Ls -l' kommandoutmatning med flikavskiljare efter utskrift av kolumnrubriken namn och Storlek . Här, OFS variabel används för att formatera utdata med en flik.

$ls -de
$ls -de | ock -v OFS='t' 'BEGIN {printf'%s t%s n ',' Name ',' Size '} {print $ 9, $ 5}'

Produktion:

Gå till Innehåll

awk med CSV -data

Innehållet i alla CSV -filer kan analyseras på flera sätt med hjälp av kommandot awk. Skapa en CSV -fil med namnet ' kund.csv 'Med följande innehåll för att tillämpa kommandot awk.

kund.txt

Id, namn, e -post, telefon
1, Sophia, [e-postskyddad], (862) 478-7263
2, Amelia, [e-postskyddad], (530) 764-8000
3, Emma, ​​[email protected], (542) 986-2390

Läser ett enda fält i CSV -filen

'-F' alternativet används med kommandot awk för att ställa in avgränsaren för att dela upp varje rad i filen. Följande awk -kommando kommer att skriva ut namn fält av kunden. csv fil.

$kattkund.csv
$ock -F ',' '{print $ 2}'kund.csv

Produktion:

Läser flera fält genom att kombinera med annan text

Följande kommando kommer att skriva ut tre fält med kund.csv genom att kombinera titeltext, Namn, e -post och telefon . Första raden i kund.csv filen innehåller titeln på varje fält. NEJ variabel innehåller filens radnummer när kommandot awk analyserar filen. I det här exemplet, NR variabel används för att utelämna den första raden i filen. Utmatningen visar 2nd, 3rdoch 4thfält på alla rader utom den första raden.

$ock -F ',' 'NR> 1 {print' Namn: '$ 2', E -post: '$ 3', Telefon: '$ 4}'kund.csv

Produktion:

Läser CSV -fil med ett awk -skript

awk -skript kan köras genom att köra awk -fil. Hur du kan skapa awk -fil och köra filen visas i detta exempel. Skapa en fil med namnet awkcsv.awk med följande kod. BÖRJA nyckelordet används i skriptet för att informera awk -kommandot för att köra skriptet för BÖRJA del först innan du utför andra uppgifter. Här, fältavgränsare ( FS ) används för att definiera delningsavgränsare och 2ndoch 1stfält kommer att skrivas ut enligt det format som används i funktionen printf ().

awkcsv.ock
BÖRJA{FS= ','} { printf '% 5s (% s) n',$2,$1}

Springa awkcsv.awk fil med innehållet i kunden. csv filen med följande kommando.

$ock -fawkcsv.awk kund.csv

Produktion:

Gå till Innehåll

okej regex

Det reguljära uttrycket är ett mönster som används för att söka efter valfri sträng i en text. Olika typer av komplicerade sök- och ersättningsuppgifter kan göras mycket enkelt med hjälp av det reguljära uttrycket. Några enkla användningsområden för det reguljära uttrycket med kommandot awk visas i detta avsnitt.

Matchande karaktäruppsättning

Följande kommando matchar ordet Dumt eller busigt eller Häftigt med inmatningssträngen och skriv ut om ordet hittas. Här, Docka kommer inte att matcha och inte skriva ut.

$printf 'Lura nHäftigt nDocka nbusa ' | ock '/[FbC] ool/'

Produktion:

Söker efter sträng i början av raden

‘^’ symbolen används i det reguljära uttrycket för att söka efter något mönster i början av raden. ' Linux ’ ord kommer att sökas i början av varje rad i texten i följande exempel. Här börjar två rader med texten, 'Linux 'Och ​​de två raderna kommer att visas i utdata.

$kastade ut -Och 'Linux är gratis att använda nDet är en öppen källkodsprogramvara nLinuxHint är
en populär bloggsida '
| ock '/^Linux/'

Produktion:

Söker efter sträng i slutet av raden

'$' symbolen används i det reguljära uttrycket för att söka efter ett mönster i slutet av varje rad i texten. ' Manus ’Ord söks i följande exempel. Här innehåller två rader ordet, Manus i slutet av raden.

$kastade ut -Och 'PHP -skript nJavaScript nVisuell programmering ' | ock '/Script $/'

Produktion:

Sökning genom att utelämna en viss teckenuppsättning

‘^’ symbolen anger textens början när den används framför ett strängmönster (‘ / ^… /’) eller innan någon teckenuppsättning deklareras av ^ […] . Om ‘^’ symbolen används inuti den tredje parentesen, [^…] då utelämnas den definierade teckenuppsättningen inuti parentes vid tidpunkten för sökning. Följande kommando söker efter alla ord som inte börjar med 'F' men slutar med ' ool '. Häftigt och bool kommer att skrivas ut enligt mönster och textdata.

$ printf 'Lura nHäftigt nDocka nbusa ' |ock' / [^ F] ool /'

Produktion:

Gå till Innehåll

awk okänslig regex

Som standard gör reguljärt uttryck skiftlägeskänslig sökning när du söker efter något mönster i strängen. Fallskänslig sökning kan göras med kommandot awk med det reguljära uttrycket. I följande exempel, att sänka() funktionen används för att söka efter skiftläge. Här kommer det första ordet på varje rad i inmatningstexten att konverteras till gemener med hjälp av att sänka() fungerar och matchar det reguljära uttrycksmönstret. toupper () funktion kan också användas för detta ändamål, i detta fall måste mönstret definieras med alla stora bokstäver. Texten som definieras i följande exempel innehåller sökordet, 'Webb ”På två rader som kommer att skrivas ut som utmatning.

$kastade ut -Och 'Webbdesign nwebbutveckling nRamverk' | ock 'tolower ($ 0) ~ /^web /;'

Produktion:

Gå till Innehåll

awk med NF (antal fält) variabel

NF är en inbyggd variabel av kommandot awk som används för att räkna det totala antalet fält i varje rad i inmatningstexten. Skapa en textfil med flera rader och flera ord. input.txt filen används här som skapades i föregående exempel.

Använda NF från kommandoraden

Här används det första kommandot för att visa innehållet i input.txt fil och det andra kommandot används för att visa det totala antalet fält i varje rad i filen med NF variabel.

$ cat input.txt
$ awk '{print NF}' input.txt

Produktion:

Använda NF i awk -fil

Skapa en awk -fil med namnet count.awk med manuset nedan. När detta skript körs med textdata kommer varje radinnehåll med totalt fält att skrivas ut som utdata.

count.awk

{skriva ut $0}
{skriva ut'[Totalt antal fält:'NF']'}

Kör skriptet med följande kommando.

$ock -fcount.awk input.txt

Produktion:

Gå till Innehåll

awk gensub () -funktion

getub () är en substitutionsfunktion som används för att söka efter sträng baserat på särskild avgränsare eller mönster med reguljärt uttryck. Denna funktion definieras i 'Gawk' paket som inte är installerat som standard. Syntaxen för denna funktion ges nedan. Den första parametern innehåller det reguljära uttrycksmönstret eller sökavgränsaren, den andra parametern innehåller ersättningstexten, den tredje parametern anger hur sökningen kommer att göras och den sista parametern innehåller texten i vilken denna funktion kommer att tillämpas.

Syntax:

gensub(regexp, ersättning, hur[, mål])

Kör följande kommando för att installera gawk paket för användning getub () funktion med kommandot awk.

$ sudo apt-get install gawk

Skapa en textfil med namnet ‘ salesinfo.txt 'Med följande innehåll för att öva detta exempel. Här separeras fälten med en flik.

salesinfo.txt

Min 700000
Din 800000
Ons 750000
Samla 200 000
Fre 430000
Lör 820000

Kör följande kommando för att läsa de numeriska fälten i salesinfo.txt fil och skriv ut summan av alla försäljningsbelopp. Här anger den tredje parametern 'G' den globala sökningen. Det betyder att mönstret kommer att sökas i hela innehållet i filen.

$ock '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} END {print 0} 'salesinfo.txt| före Kristus -de

Produktion:

Gå till Innehåll

awk med rand () -funktion

rad() funktion används för att generera ett slumpmässigt tal som är större än 0 och mindre än 1. Så det kommer alltid att generera ett bråktal mindre än 1. Följande kommando kommer att generera ett fraktionellt slumptal och multiplicera värdet med 10 för att få ett tal mer än 1. Ett bråktal med två siffror efter decimalen skrivs ut för att använda funktionen printf (). Om du kör följande kommando flera gånger får du olika utgångar varje gång.

$ock 'BEGIN {printf' Number is =%. 2f n ', rand ()*10}'

Produktion:

Gå till Innehåll

awk användardefinierad funktion

Alla funktioner som används i föregående exempel är inbyggda funktioner. Men du kan förklara en användardefinierad funktion i ditt awk-skript för att utföra en viss uppgift. Anta att du vill skapa en anpassad funktion för att beräkna ytan på en rektangel. För att utföra denna uppgift, skapa en fil med namnet ' area.awk 'Med följande skript. I det här exemplet heter en användardefinierad funktion område() deklareras i skriptet som beräknar området baserat på inmatningsparametrarna och returnerar områdesvärdet. getline kommando används här för att ta in input från användaren.

area.awk

# Beräkna område
fungeraområde(höjd,bredd){
lämna tillbakahöjd*bredd
}

# Startar körningen
BÖRJA{
skriva ut'Ange värdet för höjd:'
getline h< '-'
skriva ut'Ange värdet för bredd:'
getline w< '-'
skriva ut'Area ='område(h,i)
}

Kör skriptet.

$ock -farea.awk

Produktion:

Gå till Innehåll

okej om exempel

awk stöder villkorade uttalanden som andra vanliga programmeringsspråk. Tre typer av if -satser visas i detta avsnitt med hjälp av tre exempel. Skapa en textfil med namnet items.txt med följande innehåll.

items.txt

HDD Samsung $ 100
Mus A4Tech
Skrivare HP $ 200

Enkelt om exempel :

det följande kommandot kommer att läsa innehållet i items.txt filen och kontrollera 3rd fältvärde i varje rad. Om värdet är tomt skrivs det ut ett felmeddelande med radnumret.

$ock '{if ($ 3 ==' ') print' Prisfält saknas i rad 'NR}'items.txt

Produktion:

if-else exempel:

Följande kommando kommer att skriva ut artikelpriset om 3rdfältet finns i raden, annars skrivs det ut ett felmeddelande.

$ awk'{if ($ 3 ==' ') print' Prisfält saknas '
Annars skriv ut 'objektpriset är' $ 3} '
objekt.Text

Produktion:

if-else-if exempel:

När följande kommando kommer att köras från terminalen kommer det att ta in input från användaren. Ingångsvärdet jämförs med varje if -villkor tills villkoret är sant. Om något villkor blir sant kommer det att skriva ut motsvarande betyg. Om inmatningsvärdet inte överensstämmer med något villkor kommer det att skrivas ut misslyckas.

$ock 'BEGIN {print' Ange märket: '
getline -märke<'-'
om (mark> = 90) skriv ut 'A+'
annars om (mark> = 80) skriv ut 'A'
annars om (mark> = 70) skriv ut 'B+'
annars skriv ut 'Misslyckad'} '

Produktion:

Gå till Innehåll

awk -variabler

Deklarationen av awk -variabel liknar deklarationen av skalvariabeln. Det finns en skillnad i att läsa av variabelns värde. '$' -Symbolen används med variabelnamnet för skalvariabeln för att läsa värdet. Men det finns ingen anledning att använda '$' med awk -variabel för att läsa värdet.

Med hjälp av enkel variabel:

Följande kommando kommer att deklarera en variabel med namnet 'webbplats' och ett strängvärde tilldelas den variabeln. Variabelns värde skrivs ut i nästa sats.

$ock 'BÖRJA {site =' LinuxHint.com '; print site} '

Produktion:

Använda en variabel för att hämta data från en fil

Följande kommando söker efter ordet 'Skrivare' i filen items.txt . Om någon rad i filen börjar med 'Skrivare 'Då lagras värdet på 1st , 2nd och 3rd fält i tre variabler. namn och pris variabler kommer att skrivas ut.

$ awk'/ Skrivare/ {namn = $ 1; varumärke = $ 2; pris = $ 3; skriv ut' artikelnamn = 'namn;
print 'item price =' price} '
objekt.Text

Produktion:

Gå till Innehåll

awk -matriser

Både numeriska och associerade matriser kan användas i awk. Array variabel deklaration i awk är samma som andra programmeringsspråk. Vissa användningar av matriser visas i detta avsnitt.

Associativ matris:

Indexet för arrayen kommer att vara valfri sträng för den associativa matrisen. I det här exemplet deklareras och skrivs ut en associerad grupp med tre element.

$ock 'BÖRJA {
books ['Web Design'] = 'Inlärning av HTML 5';
books ['Web Programming'] = 'PHP och MySQL'
books ['PHP Framework'] = 'Learning Laravel 5'
printf '%s n%s n%s n', böcker ['webbdesign'], böcker ['webbprogrammering'],
böcker ['PHP Framework']} '

Produktion:

Numerisk matris:

En numerisk uppsättning med tre element deklareras och skrivs ut genom att separera fliken.

$ awk'BÖRJA {
nummer [0] = 80;
nummer [1] = 55;
nummer [2] = 76;

# utskriftselementelement
printf 'Array -värden: %d t%d t%d n', nummer [0], nummer [1], nummer [2]; } '

Produktion:

Gå till Innehåll

awk loop

Tre typer av slingor stöds av awk. Användningen av dessa slingor visas här med hjälp av tre exempel.

While loop:

medan loop som används i följande kommando kommer att iterera i 5 gånger och avsluta från loop for break -satsen.

$ ock 'BÖRJA {n = 1; medan (n 5) bryts; tryck n; n ++}} '

Produktion:

För loop:

För slinga som används i följande awk -kommando kommer summan att beräkna från 1 till 10 och skriva ut värdet.

$ock 'BÖRJA {summa = 0; för (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Produktion:

Gör-medan-slinga:

en do-while-slinga med följande kommando kommer att skriva ut alla jämna nummer från 10 till 5.

$ock 'BÖRJA {räknare = 10; gör {if (räknare%2 == 0) skrivräknare; disken-- }
medan (räknare> 5)} '

Produktion:

Gå till Innehåll

awk för att skriva ut den första kolumnen

Den första kolumnen i en fil kan skrivas ut med $ 1 -variabel i awk. Men om värdet på den första kolumnen innehåller flera ord skrivs bara det första ordet i den första kolumnen ut. Genom att använda en specifik avgränsare kan den första kolumnen skrivas ut korrekt. Skapa en textfil med namnet students.txt med följande innehåll. Här innehåller den första kolumnen texten med två ord.

Students.txt

Kaniz Fatema 30thomgång
Abir Hossain 35thomgång
John Abraham 40thomgång

Kör kommandot awk utan avgränsare. Den första delen av den första kolumnen kommer att skrivas ut.

$ock '{print $ 1}'students.txt

Kör kommandot awk med följande avgränsare. Hela delen av den första kolumnen kommer att skrivas ut.

$ock -F '\ s \ s' '{print $ 1}'students.txt

Produktion:

Gå till Innehåll

awk för att skriva ut den sista kolumnen

$ (NF) variabel kan användas för att skriva ut den sista kolumnen i valfri fil. Följande awk -kommandon kommer att skriva ut den sista delen och hela delen av den sista kolumnen i studenterna.txt fil.

$ock '{print $ (NF)}'students.txt
$ock -F '\ s \ s' '{print $ (NF)}'students.txt

Produktion:

Gå till Innehåll

awk med grep

grep är ett annat användbart kommando för Linux för att söka efter innehåll i en fil baserat på alla reguljära uttryck. Hur både awk- och grep -kommandon kan användas tillsammans visas i följande exempel. grepp kommandot används för att söka information om anställdes id, ' 1002 ' från medarbetaren. txt fil. Utmatningen från grep -kommandot skickas till awk som inmatningsdata. 5% bonus räknas och skrivs ut baserat på lönen för medarbetarens id, ' 1002 ' med awk -kommando.

$kattmedarbetare.txt
$grepp '1002'medarbetare.txt| ock -F 't' '{print $ 2' får $ '($ 3*5)/100' bonus '}'

Produktion:

Gå till Innehåll

awk med BASH -fil

Liksom andra Linux -kommandon kan kommandot awk också användas i ett BASH -skript. Skapa en textfil med namnet customers.txt med följande innehåll. Varje rad i den här filen innehåller information om fyra fält. Dessa är kundens ID, namn, adress och mobilnummer som separeras av '/ '.

customers.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, Kalifornien / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Skapa en bash -fil med namnet item_search.bash med följande skript. Enligt detta skript kommer tillståndsvärdet att tas från användaren och sökas in kunderna.txt fil av grepp kommando och skickas till kommandot awk som input. Awk -kommandot kommer att läsa 2nd och 4th fält på varje rad. Om ingångsvärdet matchar med något tillståndsvärde på customers.txt filen så kommer den att skriva ut kundens namn och mobilnummer annars kommer det att skriva ut meddelandet Ingen kund hittades .

item_search.bash

#!/bin/bash
kastade ut 'Ange tillståndets namn:'
läsastat
kunder=''grepp '$ stat'customers.txt| ock -F '/' '{print' Kundnamn: '$ 2',
Mobilnummer: '$ 4}'
''
om [ '$ kunder' !='' ];sedan
kastade ut $ kunder
annan
kastade ut 'Ingen kund hittades'
vara

Kör följande kommandon för att visa utmatningarna.

$kattcustomers.txt
$våldsamt slagitem_search.bash

Produktion:

Gå till Innehåll

awk med sed

Ett annat användbart sökverktyg för Linux är sed . Detta kommando kan användas för både sökning och ersättning av text i valfri fil. Följande exempel visar användningen av kommandot awk med sed kommando. Här kommer sed -kommandot att söka efter alla anställdas namn som börjar med ' J 'Och ​​går över till kommandot awk som inmatning. awk kommer att skriva ut anställda namn och ID efter formatering.

$kattmedarbetare.txt
$sed -n '/J/p'medarbetare.txt| ock -F 't' '{printf'%s (%s) n ', $ 2, $ 1}'

Produktion:

Gå till Innehåll

Slutsats:

Du kan använda kommandot awk för att skapa olika typer av rapporter baserat på tabellform eller avgränsad data efter att ha filtrerat data korrekt. Hoppas, du kommer att kunna lära dig hur awk -kommandot fungerar efter att ha övat på exemplen som visas i denna handledning.