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
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
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.
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.
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
+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.
$ 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 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.,
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 | 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.
$ 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 ().
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.
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.
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.
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.,
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.,
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.
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.,
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.
$ 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””}
voer het script uit met het volgende commando.
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:
voer het volgende commando uit om gawk-pakket te installeren voor het gebruik van de getsub () – functie met het awk-Commando.
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
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.,
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.
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.
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
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.
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.
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.,
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.
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.
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.,
uitvoer:
voor lus:
voor lus die wordt gebruikt in het volgende awk commando berekent de som van 1 tot 10 en print de waarde.,
Output:
do-while lus:
een do-while lus van het volgende commando zal alle even nummers van 10 tot en met 5 afdrukken.,
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
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.,
voer het awk commando uit met het volgende scheidingsteken. Het volledige deel van de eerste kolom wordt afgedrukt.
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-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.
$ 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.
$ 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.
$ 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.