veel hulpprogramma ‘ s bestaan in het Linux-besturingssysteem om een rapport te zoeken en te genereren uit tekstgegevens of bestanden. De gebruiker kan gemakkelijk vele soorten zoeken, vervangen en rapporteren genereren taken met behulp van awk, grep en sed commando ‘ s. awk is niet zomaar een commando. Het is een scripttaal die kan worden gebruikt vanuit zowel terminal als awk-bestand. Het ondersteunt de variabele, voorwaardelijke verklaring, array, loops etc. net als andere scripttalen., Het kan elke bestandsinhoud regel voor regel lezen en de velden of kolommen scheiden op basis van een specifiek scheidingsteken. Het ondersteunt ook reguliere expressie voor het zoeken van bepaalde tekenreeks in de tekstinhoud of het bestand en neemt acties als een match founds. Hoe u awk commando en script kunt gebruiken, wordt in deze tutorial getoond aan de hand van 20 handige voorbeelden.,een

  • awk met csv-gegevens
  • awk regex,
  • awk niet hoofdlettergevoelig regex,
  • awk met nf (aantal gebieden) variabele
  • awk gensub () – functie
  • awk met rand() functie
  • awk gebruiker gedefinieerde functie
  • awk als
  • awk variabelen
  • awk arrays
  • awk loop
  • awk afdrukken van de eerste kolom
  • awk voor het afdrukken van de laatste kolom
  • awk met grep
  • awk met de bash-script-bestand
  • awk met sed
  • met Behulp van de awk met printf

    printf() functie wordt gebruikt voor het opmaken van een uitgang in de meeste programmeertalen., Deze functie kan worden gebruikt met awk commando om verschillende soorten geformatteerde uitgangen te genereren. awk Commando voornamelijk gebruikt voor een tekstbestand. Maak een tekstbestand met de naam employee.txt met de inhoud hieronder gegeven waar velden worden gescheiden door tab (‘\t’).

    werknemer.txt

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

    het volgende awk commando leest gegevens van de werknemer.txt bestand regel voor regel en print de eerste ingediend na het formatteren. Hier betekent “%10s\n ” dat de uitvoer 10 tekens lang zal zijn., Als de waarde van de uitvoer minder dan 10 tekens bedraagt, worden de spaties aan de voorzijde van de waarde toegevoegd.

    $ awk ‘{ printf” %10s\n”, $1 }’ werknemer.txt

    uitvoer:

    Ga naar Content

    awk om te splitsen op witruimte

    het standaard woord-of veldscheidingsteken voor het splitsen van tekst is witruimte. awk commando kan tekst waarde als invoer op verschillende manieren. De invoer tekst wordt doorgegeven van echo commando in het volgende voorbeeld., De tekst,’ I like programming ‘ wordt standaard gesplitst als scheidingsteken, spatie, en het derde woord wordt afgedrukt als uitvoer.

    $ echo ‘I like programming’ | awk ‘{ print $3 }’

    uitvoer:

    Ga naar de inhoud

    awk om het scheidingsteken

    awk te wijzigen wordt gebruikt om het scheidingsteken voor elke bestandsinhoud te wijzigen. Stel, je hebt een tekstbestand met de naam telefoon.txt met de volgende inhoud waarbij’: ‘wordt gebruikt als veldscheidingsteken van de bestandsinhoud.

    telefoon.,txt

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

    voer het volgende awk commando uit om het scheidingsteken, ‘:’ door ‘-‘ te wijzigen in de inhoud van het bestand, telefoon.txt.

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

    uitvoer:

    Ga naar inhoud

    awk met tab-gescheiden gegevens

    awk commando heeft veel ingebouwde variabelen die worden gebruikt om de tekst op verschillende manieren te lezen. Twee van hen zijn FS en OFS., FS is input field separator en OFS is output field separator variabelen. Het gebruik van deze variabelen wordt in deze sectie getoond. Maak een door tabbladen gescheiden bestand met de naam input.txt met de volgende inhoud om het gebruik van FS en OFS variabelen te testen.

    invoer.txt

    scripttaal aan de clientzijde
    scripttaal aan de Server
    databaseserver
    webserver

    met behulp van FS-variabele met tab

    het volgende commando zal elke invoerregel splitsen.txt-bestand op basis van het tabblad (‘\t’ ) en druk het eerste veld van elke regel af.,

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

    uitvoer:

    met behulp van OFS variabele met tab

    het volgende awk commando zal de 9e en 5de velden van ‘ls-l’ Commando uitvoer met tab scheidingsteken afdrukken na het afdrukken van de kolomtitel “Name” en “Size”. Hier, OFS variabele wordt gebruikt om de uitvoer door een tab te formatteren.,

    $ ls-l
    $ ls-l | awk-v OFS=’\t’ ‘BEGIN { printf “%s\t%S\n”, “Name”, “Size”} {print $9,$5}’

    uitvoer:

    ga naar inhoud

    awk met CSV-gegevens

    de inhoud van een CSV-bestand kan op meerdere manieren worden ontleed met behulp van het awk-commando. Maak een CSV-bestand met de naam ‘klant.csv ‘ met de volgende inhoud om awk commando toe te passen.

    Klant.txt

    Reading single field of CSV file

    ‘-F’ optie wordt gebruikt met het awk commando om het scheidingsteken in te stellen voor het splitsen van elke regel van het bestand., Het volgende awk commando zal het naamveld van de klant afdrukken.csv-bestand.

    $ cat klant.csv
    $ awk-F”, “‘{print $2} ‘ klant.csv

    Output:

    het volgende commando zal drie velden van de klant afdrukken.csv door titeltekst, Naam, e-mail en telefoon te combineren. De eerste regel van de klant.csv-bestand bevat de titel van elk veld. NR variabele bevat het regelnummer van het bestand wanneer het awk Commando het bestand ontleedt., In dit voorbeeld wordt de variabele NR gebruikt om de eerste regel van het bestand weg te laten. De uitvoer toont het 2e, 3e en 4e veld van alle regels behalve de eerste regel.

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

    uitvoer:

    het lezen van CSV-bestand met behulp van een awk-script

    awk-script kan worden uitgevoerd door awk-bestand uit te voeren. Hoe u awk bestand kunt maken en het bestand kunt uitvoeren, wordt in dit voorbeeld getoond. Maak een bestand aan met de naam awkcsv.awk met de volgende code., BEGIN keyword wordt gebruikt in het script voor het informeren van awk commando om het script van het BEGIN deel eerst uit te voeren voordat het uitvoeren van andere taken. Hier wordt veldscheidingsteken (FS) gebruikt om scheidingsteken te definiëren en de 2e en 1e velden worden afgedrukt volgens het formaat dat wordt gebruikt in de functie printf ().

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

    voer awkcsv uit.awk bestand met de inhoud van de klant.csv bestand met het volgende commando.

    $ awk-f awkcsv.awk klant.,csv

    uitvoer:

    Ga naar inhoud

    awk regex

    de reguliere expressie is een patroon dat wordt gebruikt om een tekenreeks in een tekst te doorzoeken. Verschillende soorten ingewikkelde zoek-en vervang-taken kunnen heel eenvoudig worden gedaan met behulp van de reguliere expressie. Enkele eenvoudige toepassingen van de reguliere expressie met awk Commando worden getoond in deze sectie.

    overeenkomende tekenset

    het volgende commando zal overeenkomen met het woord Fool of bool of Cool met de invoertekenreeks en afdrukken als het woord wordt gevonden., Hier, pop zal niet overeenkomen en niet afdrukken.

    $ printf “Fool\nCool\nDoll\nbool” /awk ‘/ ool /’

    uitvoer:

    zoekstring aan het begin van de regel

    ‘^’ wordt gebruikt in de reguliere expressie om elk patroon aan het begin van de regel te zoeken. ‘Linux’ word zal worden gezocht aan het begin van elke regel van de tekst in het volgende voorbeeld. Hier beginnen twee regels met de tekst, ‘Linux’ en die twee regels worden in de uitvoer getoond.,

    $ echo-e “Linux is free to use\N it is an open-source software\nLinuxHint is
    a popular blog site” | awk ‘/^Linux/’

    uitvoer:

    zoekstring bij het einde van de regel

    ‘$’ symbool wordt gebruikt in de reguliere expressie om elk patroon aan het einde van elke regel van de tekst te doorzoeken. ‘Script’ woord wordt gezocht in het volgende voorbeeld. Hier bevatten twee regels het woord, Script aan het einde van de regel.,

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

    uitvoer:

    zoeken door het weglaten van bepaalde tekenset

    ‘^’ symbool geeft de begin van de tekst wanneer deze wordt gebruikt voor een tekenreeks (‘/^…/’) of voor een tekenset die is gedeclareerd door ^. Als het ‘ ^ ‘ symbool binnen de derde haakje wordt gebruikt, dan zal de gedefinieerde tekenset binnen de haakje worden weggelaten op het moment van zoeken., Het volgende commando zal elk woord doorzoeken dat niet begint met’ F ‘maar eindigt met’ool’. Cool en bool worden afgedrukt volgens het patroon en de tekst gegevens.

    $ printf “Fool\nCool\nDoll\nbool” | awk ‘/ool/’

    uitvoer:

    Ga naar inhoud

    awk ongevoelige regex

    standaard zoekt reguliere expressie hoofdlettergevoelig bij het zoeken naar een patroon in de tekenreeks. Hoofdletterongevoelig zoeken kan worden gedaan door awk commando met de reguliere expressie., In het volgende voorbeeld wordt de functie tolower() gebruikt om hoofdletterongevoelige zoekopdrachten uit te voeren. Hier zal het eerste woord van elke regel van de invoertekst worden geconverteerd naar kleine letters met behulp van de functie tolower () en overeenkomen met het reguliere expressiepatroon. toupper () functie kan ook worden gebruikt voor dit doel, in dit geval, het patroon moet worden gedefinieerd door alle hoofdletters. De tekst gedefinieerd in het volgende voorbeeld bevat het zoekwoord, ‘web’ in twee regels die zullen worden afgedrukt als uitvoer.,

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

    uitvoer:

    Ga naar inhoud

    awk met NF (aantal velden) variabele

    NF is een ingebouwde variabele van het commando awk die wordt gebruikt om het totale aantal velden in elke regel van de invoertekst te tellen. Maak een tekstbestand met meerdere regels en meerdere woorden. input.txt-bestand wordt hier gebruikt die is gemaakt in het vorige voorbeeld.,

    met NF vanaf de commandoregel

    Hier wordt het eerste commando gebruikt om de inhoud van de invoer weer te geven.txt-bestand en tweede commando wordt gebruikt om het totale aantal velden in elke regel van het bestand met behulp van NF variabele weer te geven.

    $ cat input.txt
    $ awk’ {print NF} ‘ invoer.txt

    uitvoer:

    gebruik NF in awk-bestand

    Maak een awk-bestand met de naam count.awk met het script hieronder gegeven. Wanneer dit script zal worden uitgevoerd met alle tekstgegevens dan zal elke lijn inhoud met totale velden worden afgedrukt als uitvoer.

    aantal.,awk

    {print $0}
    {print””}

    voer het script uit met het volgende commando.

    $ awk-f count.awk input.txt

    uitvoer:

    Ga naar inhoud

    awk gensub() functie

    getsub() is een substitutiefunctie die wordt gebruikt om tekenreeks te zoeken op basis van een bepaald scheidingsteken of een reguliere expressiepatroon. Deze functie wordt gedefinieerd in’ gawk ‘ pakket dat niet standaard is geïnstalleerd. De syntaxis voor deze functie wordt hieronder gegeven., De eerste parameter bevat het reguliere expressiepatroon of het zoekbegrenzer, de tweede parameter bevat de vervangende tekst, de derde parameter geeft aan hoe de zoekopdracht zal worden uitgevoerd en de laatste parameter bevat de tekst waarin deze functie zal worden toegepast.gebruik:

    gensub(regexp, replacement, how )

    voer het volgende commando uit om gawk-pakket te installeren voor het gebruik van de getsub () – functie met het awk-Commando.

    $ sudo apt-get install gawk

    Maak een tekstbestand met de naam ‘salesinfo.,txt ‘ met de volgende inhoud om dit voorbeeld te oefenen. Hier worden de velden gescheiden door een tabblad.

    verkoopinfo.txt

    Mon 700000
    di 800000
    wo 750000
    Do 200000
    VR 430000
    za 820000

    voer het volgende commando uit om de numerieke velden van de salesinfo te lezen.txt-bestand en print het totaal van alle verkoop bedrag. Hier geeft de derde parameter, ‘G’ de Globale zoekopdracht aan. Dat betekent dat het patroon zal worden gezocht in de volledige inhoud van het bestand.,

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

    uitvoer:

    Ga naar inhoud

    awk met rand() functie

    rand() functie wordt gebruikt om willekeurig getal groter dan 0 en kleiner dan 1 te genereren. Dus, het zal altijd een fractioneel getal minder dan 1 genereren. Het volgende commando genereert een fractioneel willekeurig getal en vermenigvuldigt de waarde met 10 om een getal meer dan 1 te krijgen., Een fractioneel getal met twee cijfers na de komma wordt afgedrukt voor het toepassen van de functie printf (). Als je het volgende commando meerdere keren uitvoert, krijg je elke keer een andere uitvoer.

    $ awk ‘BEGIN {printf” getal is =%.2f \ n”, rand () * 10} ‘

    Ga naar inhoud

    awk door de gebruiker gedefinieerde functie

    alle functies die in de vorige voorbeelden worden gebruikt, zijn ingebouwde functies. Maar je kunt een door de gebruiker gedefinieerde functie in je awk script opgeven om een bepaalde taak uit te voeren., Stel dat u een aangepaste functie wilt maken om het oppervlak van een rechthoek te berekenen. Om deze taak uit te voeren, maakt u een bestand met de naam ‘area.awk ‘ met het volgende script. In dit voorbeeld wordt een door de gebruiker gedefinieerde functie genaamd area() gedeclareerd in het script dat het gebied berekent op basis van de invoerparameters en de gebiedswaarde retourneert. getline commando wordt hier gebruikt om input van de gebruiker te nemen.

    gebied.awk

    voer het script uit.

    $ awk-f area.,awk

    uitvoer:

    Ga naar de inhoud

    awk als voorbeeld

    awk voorwaardelijke instructies ondersteunt zoals andere standaard programmeertalen. In deze sectie worden drie soorten if-statements getoond aan de hand van drie voorbeelden. Maak een tekstbestand met de naam items.txt met de volgende inhoud.

    items.txt

    HDD Samsung $100
    Mouse A4Tech
    Printer HP $200

    eenvoudig als voorbeeld:

    het volgende commando zal de inhoud van de items lezen.txt-bestand en controleer de 3e veldwaarde in elke regel., Als de waarde leeg is, wordt er een foutmelding afgedrukt met het regelnummer.

    $ awk ‘{ if ($3==””) print “price field ontbreekt in line” NR }’ items.txt

    uitvoer:

    if-else voorbeeld:

    het volgende commando zal de itemprijs afdrukken als het derde veld in de regel bestaat, anders zal het een foutmelding afdrukken.

    $ awk ‘{ if ($3==””) print”Price field is missing “
    else print “item price is” $3 }’ items.,txt

    uitvoer:

    if-else-if voorbeeld:

    wanneer het volgende commando vanuit de terminal wordt uitgevoerd, zal het input van de gebruiker krijgen. De invoerwaarde zal met elke if-voorwaarde worden vergeleken totdat de voorwaarde Waar is. Als een voorwaarde Waar wordt dan zal het afdrukken van de overeenkomstige rang. Als de invoerwaarde niet overeenkomt met een voorwaarde, zal het afdrukken mislukken.,

    $ awk ‘BEGIN { print “Geef de mark:”
    getline mark < “-“
    als (mark >= 90) print “A+”
    else if( mark >= 80) print “A”
    else if( mark >= 70) print “B+”
    else print “het is Mislukt” }’

    Output:

    Ga naar de Inhoud

    awk variabelen

    De verklaring van awk variabele is vergelijkbaar met de verklaring van de shell-variabele. Er is een verschil in het lezen van de waarde van de variabele., ‘$’symbool wordt gebruikt met de variabele naam voor de shell variabele om de waarde te lezen. Maar het is niet nodig om ‘$’ met awk variabele te gebruiken om de waarde te lezen.

    met behulp van eenvoudige variabele:

    het volgende commando zal een variabele met de naam ‘site’ declareren en aan die variabele wordt een tekenreekswaarde toegewezen. De waarde van de variabele wordt afgedrukt in het volgende statement.

    $ awk ‘BEGIN{ site=” LinuxHint.,com”; print site} ‘

    uitvoer:

    met behulp van een variabele om gegevens op te halen uit een bestand

    het volgende commando zal het woord ‘Printer’ doorzoeken in de bestandsitems.txt. Als een regel van het bestand begint met ‘Printer’ dan zal het de waarde van 1st, 2nd en 3rd velden opslaan in drie variabelen. naam en prijs variabelen zullen worden afgedrukt.

    $ awk ‘/Printer/ { name=$1;brand=$2;price=$3;print” item name= “name;
    print” item price= ” price }’ items.,txt

    uitvoer:

    Ga naar inhoud

    awk arrays

    zowel numerieke als geassocieerde arrays kunnen in awk worden gebruikt. Array variabele declaratie in awk is hetzelfde voor andere programmeertalen. Sommige toepassingen van arrays worden getoond in deze sectie.

    associatieve Array:

    de index van de array zal elke string voor de associatieve array zijn. In dit voorbeeld wordt een associatieve array van drie elementen gedeclareerd en afgedrukt.,

    uitvoer:

    numerieke Array:

    een numerieke array van drie elementen wordt gedeclareerd en afgedrukt door Tab te scheiden.

    uitvoer:

    Ga naar inhoud

    awk loop

    drie typen lussen worden ondersteund door awk. Het gebruik van deze lussen wordt hier getoond aan de hand van drie voorbeelden.

    While loop:

    while loop die wordt gebruikt in het volgende commando zal 5 keer herhalen en de lus verlaten voor break statement.,

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

    uitvoer:

    voor lus:

    voor lus die wordt gebruikt in het volgende awk commando berekent de som van 1 tot 10 en print de waarde.,

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

    Output:

    do-while lus:

    een do-while lus van het volgende commando zal alle even nummers van 10 tot en met 5 afdrukken.,

    $ awk ‘BEGIN {counter = 10; do { if (counter%2 ==0) print counter; counter– }
    while (counter > 5) }’

    uitvoer:

    ga naar content

    awk om de eerste kolom af te drukken

    de eerste kolom van een bestand kan worden afgedrukt met behulp van $1 variabele in awk. Maar als de waarde van de eerste kolom meerdere woorden bevat, wordt alleen het eerste woord van de eerste kolom afgedrukt. Door een specifiek scheidingsteken te gebruiken, kan de eerste kolom correct worden afgedrukt. Maak een tekstbestand met de naam studenten.,txt met de volgende inhoud. Hier Bevat de eerste kolom de tekst van twee woorden.

    studenten.,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 ‘{print $1}’ studenten.txt

    voer het awk commando uit met het volgende scheidingsteken. Het volledige deel van de eerste kolom wordt afgedrukt.

    $ awk-F ‘\\s\\S’ ‘{print $1}’ studenten.txt

    uitvoer:

    Ga naar Content

    awk om de laatste kolom af te drukken

    $(NF) variabele kan worden gebruikt om de laatste kolom van een bestand af te drukken. De volgende awk commando ‘ s zullen het laatste deel en het volledige deel van de laatste kolom van de leerlingen afdrukken.txt-bestand.,

    $ awk ‘{print $(NF)}’ studenten.txt
    $ awk-F ‘\\s\\S’ ‘{print $(NF)}’ studenten.txt

    uitvoer:

    Ga naar inhoud

    awk met grep

    grep is een ander handig commando van Linux om inhoud in een bestand te zoeken op basis van een reguliere expressie. Hoe zowel awk als grep commando ‘ s samen gebruikt kunnen worden, wordt in het volgende voorbeeld getoond. grep commando wordt gebruikt om informatie van de werknemer id, ‘1002’ van de werknemer te zoeken.txt-bestand. De uitvoer van het grep commando zal naar awk gestuurd worden als input data., 5% bonus wordt geteld en afgedrukt op basis van het salaris van de werknemer id, ‘1002’ door awk Commando.

    $ cat employee.txt
    $ grep “1002” werknemer.txt / awk-F’ \t ”{ print $2 ” zal krijgen $” ($3*5)/100 “bonus”} ‘

    uitvoer:

    Ga naar inhoud

    awk met BASH-bestand

    net als andere Linux-commando ‘ s kan awk-Commando ook worden gebruikt in een BASH-script. Maak een tekstbestand met de naam klanten.txt met de volgende inhoud. Elke regel van dit bestand bevat informatie over vier velden., Dit zijn de ID van de klant, naam, adres en mobiele nummer die worden gescheiden door ‘/’.

    klanten.txt

    Maak een bash-bestand aan met de naam item_search.bash met het volgende script. Volgens dit script, de status waarde zal worden genomen van de gebruiker en gezocht in de klanten.txt bestand door grep commando en doorgegeven aan de awk commando als invoer. Awk commando zal het 2e en 4e veld van elke regel lezen. Als de invoerwaarde overeenkomt met een statuswaarde van klanten.txt-bestand dan zal het de naam en het mobiele nummer van de klant af te drukken, anders, het zal het bericht afdrukken “geen klant gevonden”.,

    item_search.bash

    Voer de volgende commando ‘ s uit om de uitvoer te tonen.

    $ cat klanten.txt
    $ bash item_search.bash

    uitvoer:

    Ga naar inhoud

    awk met sed

    een andere nuttige zoekmachine van Linux is sed. Dit commando kan worden gebruikt voor het zoeken en vervangen van tekst van elk bestand. Het volgende voorbeeld toont het gebruik van awk commando met sed Commando. Hier, sed commando zal zoeken alle werknemers namen begint met ‘ J ‘ en gaat naar awk commando als invoer., awk zal werknemers naam en ID af te drukken na het formatteren.

    $ cat employee.txt
    $ sed-n ‘/ J / p ‘ werknemer.txt /awk-F’ \t ”{ printf “%s (%s)\n”, $2, $1 }’

    uitvoer:

    Ga naar de inhoud

    conclusie:

    U kunt de opdracht awk gebruiken om verschillende typen rapporten aan te maken op basis van een tabel of gescheiden gegevens nadat de gegevens correct zijn gefilterd. Hoop, zult u in staat om te leren hoe awk commando werkt na het oefenen van de voorbeelden in deze tutorial.

    Articles

    Geef een reactie

    Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *