många verktyg finns i Linux operativsystem 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öka, ersätta och rapportera generera uppgifter med hjälp av awk, grep och sed kommandon. 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, villkorlig uttalande, array, loopar etc. liksom andra skriptspråk., Det kan läsa alla filinnehåll rad för rad och separera fälten eller kolumnerna baserat på en specifik avgränsare. Den stöder också Reguljärt uttryck för att söka viss sträng i textinnehållet eller filen och vidtar åtgärder om någon match grundar. Hur du kan använda awk kommando och script visas i den här guiden med hjälp av 20 användbara exempel.,a
med awk med printf
printf () – funktionen används för att formatera alla utdata på de flesta programmeringsspråken., Denna funktion kan användas med awk kommando för att generera olika typer av formaterade utgångar. awk-kommandot används främst för alla textfiler. Skapa en textfil som heter employee.txt med innehållet nedan där Fält är åtskilda av flik (\t).
anställd.txt
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny lever 70000
följande awk kommando kommer att läsa data från anställd.txt-fil rad för rad och skriv ut den första arkiverade efter formatering. Här betyder” %10s\n ” att utmatningen kommer att vara 10 tecken långa., Om värdet på utmatningen är mindre än 10 tecken läggs mellanslag på framsidan av värdet.
utgång:
gå till innehåll
awk för att dela på vitt utrymme
standardord eller fältavskiljare för att dela upp någon text är vitt utrymme. awk-kommandot kan ta textvärde som inmatning på olika sätt. Inmatningstexten skickas från echo-kommandot i följande exempel., Texten, ”Jag gillar programmering” kommer att delas som standard separator, utrymme, och det tredje ordet kommer att skrivas ut som utgång.
Output:
gå till innehåll
awk för att ändra avgränsaren
awk-kommandot kan användas för att ändra avgränsaren för alla filinnehåll. Antag att du har en textfil som heter phone.txt med följande innehåll där”: ”används som fältavskiljare för filinnehållet.
telefon.,txt
+880:1855:456:907
+9:7777:38644:808
kör följande awk-kommando för att ändra avgränsaren, ’:’ av ’ – ’ till innehållet i filen, telefonen.txt.
$ awk ’$1=$1’ FS=”:” OFS=”-” telefon.Txt
utgång:
gå till innehåll
awk med tabbavgränsade 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 FS och OFS., FS är fältet avgränsare och OFS är produktionen field separator variabler. Användningarna av dessa variabler visas i detta avsnitt. Skapa en flikseparerad fil med namnet input.txt med följande innehåll för att testa användningen av FS och OFS variabler.
ingång.Txt
skriptspråk på serversidan
databasserver
webbserver
använda FS-variabel med flik
följande kommando kommer att dela upp varje inmatningsrad.txt-fil baserat på fliken (’\t’) och skriv ut det första fältet i varje rad.,
Output:
använda OFS-variabel med flik
följande awk-kommando skriver ut de 9: e och 5: e fälten ”ls-l” – kommandoutmatning med flikavgränsare efter att kolumntiteln ”Name”och” Size ” har skrivits ut. Här används OFS-variabeln för att formatera utmatningen med en flik.,
$ ls-l | awk-v OFS=’\t’ ’BEGIN { printf ”%s\t%s\n”, ”Name”, ”Size”} {print $9,$5}’
Output:
gå till innehåll
awk med CSV-data
innehållet i en CSV-fil kan tolkas på flera sätt genom att använda AWK-kommandot. Skapa en CSV-fil med namnet ’ kund.csv ’ med följande innehåll att tillämpa awk kommando.
kund.txt
läsa enda fält av CSV-fil
’-f’ alternativet används med awk kommando för att ställa in avgränsaren för att dela upp varje rad i filen., Följande awk-kommando skriver ut kundens namnfält.csv-fil.
$ awk-f ”,” ’{Skriv ut $2}’ kund.csv
utgång:
läsa flera fält genom att kombinera med annan text
följande kommando kommer att skriva ut tre kundfält.csv genom att kombinera titel text, Namn, e-post och telefon. Den första raden av kunden.csv-filen innehåller titeln på varje fält. NR-variabeln innehåller radnumret för filen när awk-kommandot tolkar filen., I det här exemplet används NR-variabeln för att utelämna den första raden i filen. Utgången kommer att visa 2: a, 3: e och 4: e fält av alla linjer utom den första raden.
Output:
läsa CSV-fil med hjälp av en awk script
awk script kan utföras genom att köra awk-fil. Hur du kan skapa awk-fil och köra filen visas i det här exemplet. Skapa en fil som heter awkcsv.awk med följande kod., BEGIN keyword används i skriptet för att informera awk-kommandot för att utföra skriptet i BEGIN part först innan du utför andra uppgifter. Här används fältavskiljare (FS) för att definiera dela avgränsare och 2: A och 1: A fält skrivs ut enligt det format som används i funktionen printf ().
BEGIN {FS -= ”,”} {printf ”%5s(%s)\n”, $2,$1}
Kör awkcsv.awk-fil med innehållet i kunden.csv-fil med följande kommando.
Output:
gå till innehåll
awk regex
det reguljära uttrycket är ett mönster som används för att söka någon sträng i en text. Olika typer av komplicerade Sök – och ersättningsuppgifter kan göras mycket enkelt genom att använda det reguljära uttrycket. Några enkla användningar av det reguljära uttrycket med awk-kommandot visas i det här avsnittet.
följande kommando matchar ordet Fool eller bool eller Cool med inmatningssträngen och skriver ut om ordet founds., Här kommer dockan inte att matcha och inte skriva ut.
Output:
söker sträng i början av raden
’^’ symbol används i det reguljära uttrycket för att söka mönster i det reguljära uttrycket.början av linjen. ”Linux” word kommer att sökas vid början av varje rad i texten i följande exempel. Här börjar två rader med texten, ”Linux” och de två linjerna visas i utmatningen.,
en populär bloggwebbplats” | awk ’/^Linux/’
Output:
söker 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. ’Script’ word söks i följande exempel. Här innehåller två rader ordet, skript i slutet av raden.,
Output:
sökning genom att utelämna en viss teckenuppsättning
’^’ symbol indikerar textens början när den används framför skärmen.varje strängmönster (’/^…/’) eller före någon teckenuppsättning som deklareras av^. Om ’ ^ ’ – symbolen används inuti den tredje konsolen kommer det definierade teckenuppsättningen inuti konsolen att utelämnas vid tiden för sökningen., Följande kommando kommer att söka något ord som inte börjar med ” F ”men slutar med ”ool”. Cool och bool kommer att skrivas ut enligt mönster och textdata.
Output:
gå till innehåll
awk case insensitive regex
som standard gäller Reguljärt uttryck känslig sökning när du söker något mönster i strängen. Case okänslig sökning kan göras av awk kommando med reguljärt uttryck., I följande exempel används funktionen tolower () för att göra Fall okänslig sökning. Här konverteras det första ordet i varje rad i inmatningstexten till gemener genom att använda tolower () – funktionen och matcha med det reguljära uttrycksmönstret. toupper () funktion kan också användas för detta ändamål, i detta fall måste mönstret definieras av all bokstav. Texten som definieras i följande exempel innehåller sökordet, ” web ” i två rader som skrivs ut som utdata.,
Output:
gå till innehåll
awk med NF (antal fält) variabel
NF är en inbyggd variabel av awk-kommandot som används för att räkna det totala antalet fält i varje rad i indatatexten. Skapa en textfil med flera rader och flera ord. ingång.txt-fil används här som skapas 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 inmatningen.txt-fil och andra kommandot används för att visa det totala antalet fält i varje rad i filen med NF-variabel.
$ awk ’{print NF}’ ingång.Txt
utgång:
använda NF i awk-fil
skapa en awk-fil med namnet count.awk med skriptet nedan. När det här skriptet körs med någon textdata skrivs varje linjeinnehåll med totala fält ut som utdata.
räkna.,awk
{print”}
kör skriptet med följande kommando.
Output:
gå till innehåll
awk gensub() funktion
getsub() är en substitutionsfunktion som används för att söka sträng baserat på särskild avgränsare eller 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 reguljära uttrycksmönstret eller sökavgränsaren, den andra parametern innehåller ersättningstexten, den tredje parametern anger hur sökningen ska göras och den sista parametern innehåller texten där den här funktionen ska tillämpas.
Syntax:
kör följande kommando för att installera gawk-paketet för att använda getsub () – funktionen med awk-kommandot.
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
Tue 800000
ons 750000
Thu 200000
fre 430000
lör 820000
kör följande kommando för att läsa de numeriska fälten i salesinfo.txt-fil och skriva 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.,
utgång:
gå till innehåll
awk med rand() funktion
rand() funktion används för att generera slumptal 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 en bråk slumptal och multiplicera värdet med 10 för att få ett tal mer än 1., Ett bråktal med två siffror efter decimaltecknet skrivs ut för att använda funktionen printf (). Om du kör följande kommando flera gånger får du olika utdata varje gång.
utgång:
gå till innehåll
awk användardefinierad funktion
alla funktioner som används i de tidigare exemplen är inbyggda funktioner. Men du kan förklara en användardefinierad funktion i ditt awk-skript för att göra en viss uppgift., Antag att du vill skapa en anpassad funktion för att beräkna området för en rektangel. För att göra den här uppgiften, skapa en fil med namnet ” område.awk ’ med följande skript. I det här exemplet deklareras en användardefinierad funktion som heter area() i skriptet som beräknar området baserat på ingångsparametrarna och returnerar områdesvärdet. getline kommando används här för att ta indata från användaren.
område.awk
kör skriptet.
utgång:
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 objekt.txt med följande innehåll.
objekt.txt
mus A4Tech
skrivare HP $200
enkelt om exempel:
följande kommando läser innehållet i objekten.txt-fil och kontrollera det tredje fältvärdet i varje rad., Om värdet är tomt kommer det att skriva ut ett felmeddelande med radnumret.
utgång:
if-else exempel:
följande kommando kommer att skriva ut objektpriset om det tredje fältet finns i raden, annars kommer det att skriva ut ett felmeddelande.
else print ”objektpriset är” $3} objekt.,Txt
Output:
if-else-if example:
När följande kommando körs från terminalen kommer det att ta inmatning från användaren. Inmatningsvä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 inmatningsvärdet inte matchar med något villkor kommer det att skriva ut misslyckas.,
getline mark < ”-”
if (mark >= 90) Skriv ut ”a+”
else if( mark >= 80) Skriv ut ”a”
else if( Mark >= 70) Skriv ut ”b+”
else Print ”Fail” }’
utgång:
gå till innehåll
awk-variabler
deklarationen för awk-variabeln liknar deklarationen för 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 ingen anledning att använda ” $ ” med awk-variabel för att läsa värdet.
använda enkel variabel:
följande kommando förklarar en variabel som heter ”site” och ett strängvärde tilldelas den variabeln. Värdet på variabeln skrivs ut i nästa uttalande.
med hjälp av en variabel för att hämta data från en fil
följande kommando söker efter ordet”skrivare” i filobjekten.txt. Om någon rad i filen börjar med ”skrivare” kommer det att lagra värdet på 1: A, 2: A och 3: e fält i tre variabler. namn och prisvariabler skrivs ut.
skriv ut ”i artikel pris= pris }’ objekt.,Txt
utgång:
gå till innehåll
awk-arrayer
både numeriska och associerade arrayer 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 Array:
matrisens index kommer att vara vilken sträng som helst för den associativa matrisen. I detta exempel deklareras och skrivs en associativ uppsättning av tre element.,
utgång:
numerisk Array:
en numerisk array med tre element deklareras och skrivs ut genom att separera fliken.
utgång:
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.
medan loop:
medan loop som används i följande kommando kommer att iterera för 5 gånger och avsluta från slingan för break uttalande.,
Output:
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.,
Output:
Do-while loop:
a do-while loop of the following command kommer att skriva ut alla jämna nummer från 10 till 5.,
while (counter> 5)} ’
Output:
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 hjälp av $1-variabeln 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 studenter.,txt med följande innehåll. Här innehåller den första kolumnen texten med två ord.
studenter.,txt
Abir Hossain 35<sup>th</sup> batch
John Abraham 40<sup>th</sup> batch
Run awk command without any delimiter. The first part of the first column will be printed.,
kör awk-kommandot med följande avgränsare. Hela delen av den första kolumnen skrivs ut.
utgång:
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 en fil. Följande awk-kommandon kommer att skriva ut den sista delen och hela delen av den sista kolumnen av eleverna.txt-filen.,
$ awk-F ’\\n\\s’ ’{print $(NF)}’ studenter.Txt
Output:
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å ett 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.txt-filen. Utmatningen från grep-kommandot skickas till awk som inmatningsdata., 5% bonus kommer att räknas och skrivas ut baserat på lönen för anställd id, ’1002’ av awk kommando.
$ grep ’1002 anställd.txt / awk-f’ \t ”{print $2 ” kommer att få $” ($3*5)/100 ”bonus”}’
utgång:
gå till innehåll
awk med BASH-fil
liksom andra Linux-kommando kan awk-kommandot också användas i ett BASH-skript. Skapa en textfil med namnet kunder.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 är åtskilda av ’/’.
kunder.txt
skapa en bash-fil som heter item_search.bash med följande skript. Enligt detta skript kommer statsvärdet att tas från användaren och sökas i kunderna.txt-fil med grep-kommandot och skickas till awk-kommandot som inmatning. Awk-kommandot läser 2: A och 4: e fält i varje rad. Om inmatningsvärdet matchar något statligt värde för kunderna.txt-fil då kommer det att skriva ut kundens namn och mobilnummer, annars kommer det att skriva ut meddelandet ”Ingen kund hittades”.,
item_search.bash
kör följande kommandon för att visa utgångarna.
$ bash item_search.bash
utgång:
gå till innehåll
awk med sed
ett annat användbart sökverktyg för Linux är sed. Det här kommandot kan användas för både sökning och ersättning av text av vilken fil som helst. Följande exempel visar användningen av awk-kommandot med sed-kommandot. Här kommer sed-kommandot att söka alla medarbetarnamn börjar med ” J ” och passerar till awk-kommandot som inmatning., awk kommer att skriva ut anställdas namn och ID efter formatering.
$ sed-n ’/J/p anställd.txt / awk-f’ \t ”{ printf ”%s (%s)\n”, $2, $1 }’
utgång:
gå till innehåll
slutsats:
Du kan använda awk-kommandot för att skapa olika typer av rapporter baserat på tabelldata eller avgränsade data efter att ha filtrerat data korrekt. Hoppas, du kommer att kunna lära dig hur awk-kommandot fungerar efter att ha praktiserat exemplen som visas i den här handledningen.