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

  • awk med csv-data
  • awk regex
  • awk case okänslig regex
  • awk med NF (antal fält) variabel
  • awk gensub() funktion
  • awk med rand() funktion
  • awk användardefinierad funktion
  • awk if
  • awk variabler
  • awk-matriser
  • awk-loop
  • awk för att skriva ut den första kolumnen
  • awk för att skriva ut den sista kolumnen
  • awk med grep
  • awk med bash-skriptfilen
  • awk med sed
  • 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

    1001 John sena 40000
    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.

    $ awk ’{ printf ”% – 10s\n”, $1 }’ anställd.Txt

    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.

    $ echo ’I like programming’ /awk ’{ print $3} ’

    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

    +123:334:889:778
    +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.

    $ cat phone.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å klientsidan
    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.,

    $ awk ’{ print $1 }’ FS=’\t’ input.Txt

    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
    $ 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.

    $ cat-kund.csv
    $ 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.

    $ awk-F”,”’NR>1 {print” Name: ”$2”, Email: ”$3”, Phone: ”$4}’ kund.csv

    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 ().

    awkcsv.awk
    BEGIN {FS -= ”,”} {printf ”%5s(%s)\n”, $2,$1}

    Kör awkcsv.awk-fil med innehållet i kunden.csv-fil med följande kommando.

    $ awk-f awccsv.awk kund.,csv

    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.

    matchande teckenuppsättning

    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.

    $ printf ”Fool\Ncool\nDoll\nbool” /awk ’/ ool /’

    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.,

    $ echo-e ”Linux är gratis att använda\N Det är en öppen källkod\nLinuxHint är
    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.,

    $ echo-e ”PHP Script\nJavaScript\nVisual Programming” | awk ’/Script$/’

    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.

    $ printf ”Fool\Ncool\nDoll\nbool” | awk ’/ool/’

    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.,

    $ echo-e ”Web Design\nweb development\nFramework” | awk ’tolower($0) ~ /^web/;’

    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.

    $ cat-ingång.Txt
    $ 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 $0}
    {print”}

    kör skriptet med följande kommando.

    $ awk-f räkna.awk ingång.Txt

    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:

    gensub(regexp, replacement, how)

    kör följande kommando för att installera gawk-paketet för att använda getsub () – funktionen med awk-kommandot.

    $ 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

    mån 700000
    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.,

    $ awk ’{ x=gensub(”\t”,””,”G”,$2); printf x ”+” } END{ print 0 }’ salesinfo.Txt/bc-l

    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.

    $ awk ’BEGIN {printf ”Nummer =%.2F\n” , rand()*10}’

    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.

    $ awk-f-området.,awk

    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

    HDD Samsung $100
    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.

    $ awk ’{ if ($3 == ””) print ”prisfält saknas i rad” NR }’ objekt.Txt

    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.

    $ awk ’{ if ($3 == ””) print ”prisfältet saknas”
    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.,

    $ awk ’BEGIN { print ”Enter the mark:”
    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.

    $ awk ’BEGIN{ site=”LinuxHint.,

    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.

    $ awk ’/Skrivare/ { namn=$1;brand=$2;pris=$3;print ”item name=” namn;
    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.,

    $ awk ’BEGIN { n = 1; while (n<= 10) { if(n> 5) break; print n; n++}} ’

    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.,

    $ awk ’BEGIN { sum=0; for (N = 1; n<= 10; n++) sum=sum+n; print sum} ’

    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.,

    $ awk ’BEGIN {counter = 10; do { if (counter%2 ==0) Print counter; counter–}
    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

    Kaniz Fatema 30<sup>th</sup> batch
    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.,

    $ awk ’{Skriv ut $1}’ studenter.Txt

    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.Txt

    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 ’{print $(NF)}’ studenter.txt
    $ 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.

    $ cat anställd.txt
    $ 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.

    $ cat-kunder.txt
    $ 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.

    $ cat anställd.txt
    $ 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.

    Articles

    Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *