Awk

20 awk-exempel

20 awk-exempel

20 awk-exempel

Många verktyg finns i operativsystemet Linux för att söka och generera en rapport från textdata eller fil. Användaren kan enkelt utföra många typer av sökning, ersättning och rapportgenererande uppgifter med 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 variabla, villkorliga uttalanden, 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å reguljärt uttryck för att söka i en viss sträng i textinnehållet eller filen och vidtar åtgärder om någon match hittas. Hur du kan använda awk-kommando och skript visas i den här handledningen med 20 användbara exempel.

Innehåll:

  1. awk med printf
  2. besvärligt att dela på vitt utrymme
  3. besvärligt att ändra avgränsaren
  4. awk med tabbavgränsad data
  5. awk med csv-data
  6. awk regex
  7. awk fall 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. besvärligt om
  13. awk-variabler
  14. awk arrays
  15. awk loop
  16. besvärligt att skriva ut den första kolumnen
  17. besvärligt att skriva ut den sista kolumnen
  18. awk med grep
  19. awk med bash-skriptfilen
  20. besvärad med sed

Använda awk med printf

printf () funktionen används för att formatera alla utdata på de flesta programmeringsspråk. Denna funktion kan användas med awk kommando för att generera olika typer av formaterade utgångar. awk-kommando används främst för alla textfiler. Skapa en textfil med namnet anställd.Text med innehållet nedan där fälten är separerade med flik ('\ t').

anställd.Text

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 anställd.Text fil rad för rad och skriv ut den första arkiverade efter formatering. Här, “% 10s \ n”Betyder att utmatningen kommer att vara tio tecken lång. Om värdet på utdata är mindre än 10 tecken kommer mellanslag att läggas till framför värdet.

$ awk 'printf "% 10s \ n", $ 1' anställd.Text

Produktion:

Gå till innehåll

besvärligt att dela på vitt utrymme

Standardordet eller fältseparatorn för delning av text är vitt mellanrum. awk-kommandot kan ta textvärde som inmatning på olika sätt. Ingångstexten skickas från eko kommandot i följande exempel. Texten, 'Jag gillar att programmeradelas som standardavgränsare, Plats, och det tredje ordet kommer att skrivas ut som utdata.

$ echo 'Jag gillar programmering' | awk 'skriv ut $ 3'

Produktion:

Gå till innehåll

besvärligt att ändra avgränsaren

awk-kommandot kan användas för att ändra avgränsaren för filinnehåll. Anta att du har en textfil med namnet telefon.Text med följande innehåll där ':' används som fältseparator för filinnehållet.

telefon.Text

+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, telefon.Text.

$ kattelefon.Text
$ awk '$ 1 = $ 1' FS = ":" OFS = "-" telefon.Text

Produktion:

Gå till innehåll

awk med tabbavgränsad data

awk-kommandot har många inbyggda variabler som används för att läsa texten på olika sätt. Två av dem är det FS och OFS. FS är inmatningsfältavgränsare och OFS är separationsvariabler för utmatningsfält. Användningarna av dessa variabler visas i detta avsnitt. Skapa en flik separerad fil med namnet inmatning.Text med följande innehåll för att testa användningen av FS och OFS variabler.

Inmatning.Text

Skriptspråk på klientsidan
Skriptspråk på serversidan
Databasserver
Webbserver

Använd FS-variabel med flik

Följande kommando delar upp varje rad av inmatning.Text fil baserad på fliken ('\ t') och skriv ut det första fältet på varje rad.

$ awk 'print $ 1' FS = '\ t' input.Text

Produktion:

Använda OFS-variabel med flik

Följande awk-kommando skriver ut 9th och 5th fält av 'ls -l' kommandoutgång med flikavskiljare efter utskrift av kolumnrubriken “namn”Och”Storlek”. Här, OFS variabel används för att formatera utdata med en flik.

$ ls -l
$ ls -l | awk -v OFS = '\ t' 'BÖRJA printf "% s \ t% s \ n", "Name", "Size" print $ 9, $ 5'

Produktion:

Gå till innehåll

awk med CSV-data

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

kund.Text

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

Läser ett enda CSV-filfält

'-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 skriver ut namn fält av kunden.csv fil.

$ kattkund.csv
$ awk -F "," 'print $ 2' kund.csv

Produktion:

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

Följande kommando skriver ut tre fält av kund.csv genom att kombinera titeltext, Namn, e-post och telefon. Den första raden av kund.csv filen innehåller titeln på varje fält. NR variabel innehåller filens radnummer när kommandot awk analyserar filen. I detta exempel, NR variabel används för att utelämna den första raden i filen. Utgången visar 2nd, 3rd och 4th fält på alla rader utom den första raden.

$ awk -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 nyckelord används i skriptet för att informera awk-kommandot för att utföra skriptet för BÖRJA del först innan du utför andra uppgifter. Här, fältseparator (FS) används för att definiera delningsavgränsare och 2nd och 1st fält skrivs ut enligt det format som används i funktionen printf ().

awkcsv.awk
BÖRJA FS = "," printf "% 5s (% s) \ n", $ 2, $ 1

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

$ awk -f awkcsv.awk kund.csv

Produktion:

Gå till innehåll

awk regex

Det reguljära uttrycket är ett mönster som används för att söka i 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ändningar av det reguljära uttrycket med kommandot awk visas i detta avsnitt.

Matchande teckenuppsättning

Följande kommando matchar ordet Dår eller bool eller Häftigt med inmatningssträngen och skriv ut om ordet hittas. Här, Docka matchar inte och skrivs inte ut.

$ printf "Fool \ nCool \ nDoll \ nbool" | awk '/ [FbC] ool /'

Produktion:

Söksträng i början av raden

'^' symbolen används i det reguljära uttrycket för att söka i vilket mönster som helst i början av raden. ''Linux ' ordet 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 utgången.

$ echo -e "Linux är gratis att använda \ n Det är en programvara med öppen källkod \ nLinuxHint är
en populär bloggsida "| awk '/ ^ Linux /'

Produktion:

Söksträng i slutet av raden

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

$ echo -e "PHP-skript \ nJavaScript \ nVisuell programmering" | awk '/ Script $ /'

Produktion:

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

'^' symbol anger början på texten när den används framför ett strängmönster ('/ ^ ... /') eller innan någon teckenuppsättning deklareras av ^ […]. Om den '^' symbolen används inuti den tredje fästet, [^ ...] då kommer den definierade teckenuppsättningen inuti fästet att utelämnas vid tiden för sökningen. Följande kommando söker efter 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 "Fool \ nCool \ nDoll \ nbool" | awk '/ [^ F] ool /'

Produktion:

Gå till innehåll

awk fall okänslig regex

Som standard gör regeluttryck skiftlägeskänslig sökning när du söker i ett mönster i strängen. Skiftlägeskänslig sökning kan göras med kommando awk med det reguljära uttrycket. I följande exempel, att sänka() funktionen används för att göra skiftlägeskänslig sökning. Här kommer det första ordet i varje rad i inmatningstexten att konverteras till gemener med hjälp av att sänka() funktion och matcha med det reguljära uttrycksmönstret. toupper () funktionen kan också användas för detta ändamål, i det här fallet måste mönstret definieras med alla versaler. Texten som definieras i följande exempel innehåller sökordet, 'webb'i två rader som kommer att skrivas ut som utdata.

$ echo -e "Webbdesign \ nwebutveckling \ nFramework" | awk 'tolower ($ 0) ~ / ^ web /;'

Produktion:

Gå till innehåll

awk med variabel NF (antal fält)

NF är en inbyggd variabel för awk-kommandot som används för att räkna det totala antalet fält i varje rad i inmatningstexten. Skapa valfri textfil med flera rader och flera ord. ingången.Text 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 inmatning.Text fil och andra kommando används för att visa det totala antalet fält i varje rad i filen med NF variabel.

$ cat input.Text
$ awk 'print NF' inmatning.Text

Produktion:

Använda NF i awk-fil

Skapa en awk-fil med namnet räkna.awk med manuset nedan. När det här skriptet körs med textdata kommer varje radinnehåll med totalt antal fält att skrivas ut.

räkna.awk

skriv ut $ 0
print "[Totalt antal fält:" NF "]"

Kör skriptet med följande kommando.

$ awk -f antal.awk input.Text

Produktion:

Gå till innehåll

awk gensub () -funktion

getub () är en substitutionsfunktion som används för att söka i sträng baserat på en särskild avgränsare eller ett reguljärt uttrycksmönster. 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 vanliga uttrycksmönstret eller sökavgränsaren, den andra parametern innehåller ersättningstexten, den tredje parametern indikerar hur sökningen ska göras och den sista parametern innehåller texten i vilken denna funktion ska tillämpas.

Syntax:

gensub (regexp, ersättning, hur [, target])

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

$ sudo apt-get install gawk

Skapa en textfil med namnet 'försäljningsinfo.Text'med följande innehåll för att öva detta exempel. Här separeras fälten med en flik.

försäljningsinfo.Text

Mån 700000
Tis 800000
Ons 750000
Tor 200000
Fre 430000
Lör 820000

Kör följande kommando för att läsa de numeriska fälten i försäljningsinfo.Text filen och skriv ut summan av allt 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.

$ awk 'x = gensub ("\ t", "", "G", $ 2); printf x "+" SLUT print 0 'försäljningsinfo.txt | bc -l

Produktion:

Gå till innehåll

awk med rand () -funktion

rand() -funktionen används för att generera valfritt slumptal större än 0 och mindre än 1. Så det kommer alltid att generera ett bråktal mindre än 1. Följande kommando genererar ett slumpmässigt bråknummer och multiplicerar värdet med 10 för att få ett tal mer än 1. Ett bråknummer med två siffror efter decimal kommer att skrivas ut för att tillämpa funktionen printf (). Om du kör följande kommando flera gånger kommer du att få olika utdata varje gång.

$ awk '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 göra en viss uppgift.  Anta att du vill skapa en anpassad funktion för att beräkna ytan på en rektangel. För att göra den här uppgiften skapar du en fil med namnet 'område.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 areavärdet. getline kommandot används här för att ta in input från användaren.

område.awk

# Beräkna område
funktionsområde (höjd, bredd)
returhöjd * bredd

# Startar körning
BÖRJA
tryck "Ange höjdvärdet:"
getline h < "-"
tryck "Ange värdet på bredden:"
getline w < "-"
skriv ut "Area =" area (h, w)

Kör manuset.

$ awk -f-område.awk

Produktion:

Gå till innehåll

awk om exempel

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

föremål.Text

HDD Samsung $ 100
Mus A4Tech
Skrivare HP $ 200

Enkelt om exempel:

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

$ awk 'if ($ 3 == "") skriv ut "Prisfält saknas i raden" NR ".Text

Produktion:

om-annat exempel:

Följande kommando skriver ut artikelpriset om 3rd fältet finns på raden, annars skriver det ett felmeddelande.

$ awk 'if ($ 3 == "") skriv ut "Prisfält saknas"
annars skriv ut "artikelpriset är" $ 3 "artiklar.Text

Produktion:

if-else-if exempel:

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

$ awk '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 "Misslyckas" '

Produktion:

Gå till innehåll

awk-variabler

Deklarationen av awk-variabeln liknar deklarationen av skalvariabeln. Det finns en skillnad i att läsa värdet på variabeln. '$' - symbolen används med variabelnamnet för skalvariabeln för att läsa värdet. Men det finns inget behov av att använda '$' med awk-variabel för att läsa värdet.

Använda enkel variabel:

Följande kommando deklarerar en variabel med namnet 'webbplats' och ett strängvärde tilldelas variabeln. Variabelns värde skrivs ut i nästa uttalande.

$ awk 'BEGIN site = "LinuxHint.com "; tryck webbplats '

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 föremål.Text. 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 skrivs ut.

$ awk '/ skrivare / name = $ 1; varumärke = $ 2; pris = $ 3; skriv ut "artikelnamn =" namn;
skriva ut "artikelpris =" pris 'artiklar.Text

Produktion:

Gå till innehåll

awk arrays

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

Associativ matris: 

Matrisens index kommer att vara vilken sträng som helst för den associerande matrisen.  I det här exemplet deklareras och skrivs ut en associerande matris med tre element.

$ awk 'BEGIN
books ["Web Design"] = "Lära sig HTML 5";
books ["Web Programming"] = "PHP och MySQL"
books ["PHP Framework"] = "Lärande Laravel 5"
printf "% s \ n% s \ n% s \ n", böcker ["Webbdesign"], böcker ["Webbprogrammering"],
böcker ["PHP Framework"] '

Produktion:

Numerisk matris:

En numerisk matris med tre element deklareras och skrivs ut genom att separera fliken.

$ awk 'BEGIN
antal [0] = 80;
nummer [1] = 55;
antal [2] = 76;

# skriv ut arrayelement
printf "Arrayvärden:% d \ t% d \ t% d \ n", nummer [0], nummer [1], nummer [2]; '

Produktion:

Gå till innehåll

awk loop

Tre typer av öglor 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 5 gånger och gå ut från loop för break-uttalande.

$ Awk 'BEGIN n = 1; medan (n <= 10) if(n > 5) bryta; tryck n; n ++ '

Produktion:

För loop:

För loop som används i följande awk-kommando beräknar summan från 1 till 10 och skriver ut värdet.

$ awk 'BEGIN sum = 0; för (n = 1; n <= 10; n++) sum=sum+n; print sum '

Produktion:

Gör-ögla:

en "loop-loop" med följande kommando skriver ut alla jämna nummer från 10 till 5.

$ awk 'BEGIN counter = 10; gör if (counter% 2 == 0) utskriftsräknare; disken--
medan (räknare> 5) '

Produktion:

Gå till innehåll

besvärligt att skriva ut den första kolumnen

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

Studenter.Text

Kaniz Fatema 30th omgång
Abir Hossain 35th omgång
John Abraham 40th omgång

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

$ awk 'print $ 1' studenter.Text

Kör awk-kommandot med följande avgränsare. Hela delen av den första kolumnen skrivs ut.

$ awk -F '\\ s \\ s' 'skriv ut $ 1' studenter.Text

Produktion:

Gå till innehåll

besvärligt att skriva ut den sista kolumnen

$ (NF) variabel kan användas för att skriva ut den sista kolumnen i vilken fil som helst. Följande awk-kommandon skriver ut den sista delen och hela delen av den sista kolumnen i studenterna.Text fil.

$ awk 'print $ (NF)' studenter.Text
$ awk -F '\\ s \\ s' 'print $ (NF)' studenter.Text

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å något reguljärt uttryck. Hur både awk- och grep-kommandon kan användas tillsammans visas i följande exempel. grep kommandot används för att söka information om anställd id, '1002' från den anställde.Text fil. Utgången från grep-kommandot skickas till awk som indata. 5% bonus räknas och skrivs ut baserat på lönen för anställd id, '1002 ' med awk-kommando.

$ kattanställd.Text
$ grep '1002' anställd.txt | awk -F '\ t' 'print $ 2 "får $" ($ 3 * 5) / 100 "bonus"'

Produktion:

Gå till innehåll

awk med BASH-fil

Liksom andra Linux-kommandon kan awk-kommandot också användas i ett BASH-skript. Skapa en textfil med namnet kunder.Text 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 är åtskilda av '/''.

kunder.Text

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 artikel_sökning.våldsamt slag med följande skript. Enligt detta skript kommer tillståndsvärdet att tas från användaren och sökas in kunderna.Text arkivera av grep kommandot och skickas till awk-kommandot som inmatning. Awk-kommandot kommer att läsa 2nd och 4th fält på varje rad. Om ingångsvärdet matchar något tillståndsvärde på kunder.Text filen, kommer den att skriva ut kundens namn och mobilnummer, annars skriver meddelandet “Ingen kund hittades”.

artikel_sökning.våldsamt slag

#!/ bin / bash
eko "Ange statens namn:"
lässtatus
kunder = 'grep "$ state" kunder.txt | awk -F "/" 'print "Kundnamn:" $ 2, ",
Mobilnummer: "$ 4"
om ["$ kunder" != ""]; sedan
echo $ kunder
annan
eko "Ingen kund hittades"
fi

Kör följande kommandon för att visa utgångarna.

$ kattkunder.Text
$ bash item_search.våldsamt slag

Produktion:

Gå till innehåll

besvärad 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 söker kommandot i alla anställdas namn börjar med 'J'och övergår till kommandot awk som inmatning. awk kommer att skriva ut anställd namn och ID efter formatering.

$ kattanställd.Text
$ sed -n '/ J / p' anställd.txt | awk -F '\ t' 'printf "% s (% s) \ n", $ 2, $ 1'

Produktion:

Gå till innehåll

Slutsats:

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

Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...
Mus Mus vänsterklicka på knappen fungerar inte på Windows 10
Mus vänsterklicka på knappen fungerar inte på Windows 10
Om du använder en dedikerad mus med din bärbara dator eller stationära dator men musens vänsterklick-knapp fungerar inte på Windows 10/8/7 av någon an...
Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...