Awk

20 akutte eksempler

20 akutte eksempler

20 akutte eksempler

Der findes mange værktøjsværktøjer i Linux-operativsystemet til at søge og generere en rapport fra tekstdata eller fil. Brugeren kan nemt udføre mange typer søgning, erstatning og rapportgenererende opgaver ved hjælp af kommandoer awk, grep og sed. awk er ikke bare en kommando. Det er et script-sprog, der kan bruges fra både terminal- og awk-fil. Det understøtter den variable, betingede erklæring, array, sløjfer osv. ligesom andre script-sprog. Det kan læse ethvert filindhold linje for linje og adskille felterne eller kolonnerne baseret på en bestemt afgrænser. Det understøtter også regulært udtryk til søgning efter bestemt streng i tekstindholdet eller filen og foretager handlinger, hvis der findes nogen match. Hvordan du kan bruge awk-kommando og script vises i denne vejledning ved hjælp af 20 nyttige eksempler.

Indhold:

  1. awk med printf
  2. akavet at opdele på hvidt rum
  3. akavet med at ændre skillelinjen
  4. awk med tabulatorafgrænsede data
  5. awk med csv-data
  6. awk regex
  7. awk case ufølsom regex
  8. awk med nf (antal felter) variabel
  9. awk gensub () -funktion
  10. awk med rand () funktion
  11. awk brugerdefineret funktion
  12. akavet hvis
  13. awk variabler
  14. awk arrays
  15. awk loop
  16. akut for at udskrive den første kolonne
  17. awk at udskrive den sidste kolonne
  18. akav med grep
  19. awk med bash-scriptfilen
  20. akavet med sed

Brug af awk med printf

printf () funktion bruges til at formatere ethvert output på de fleste programmeringssprog. Denne funktion kan bruges med akavet kommando til at generere forskellige typer formaterede output. awk-kommando, der hovedsagelig bruges til enhver tekstfil. Opret en tekstfil med navnet medarbejder.txt med nedenstående indhold, hvor felter er adskilt med fane ('\ t').

medarbejder.txt

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

Den følgende awk-kommando læser data fra medarbejder.txt fil linje for linje og udskriv den første arkiverede efter formatering. Her, "% 10s \ n”Betyder, at output vil være 10 tegn langt. Hvis værdien af ​​output er mindre end 10 tegn, tilføjes mellemrumene foran værdien.

$ awk 'printf "% 10s \ n", $ 1' medarbejder.txt

Produktion:

Gå til indhold

akavet at opdele på hvidt rum

Standardord- eller feltseparatoren til opdeling af enhver tekst er hvidt mellemrum. awk-kommandoen kan tage tekstværdi som input på forskellige måder. Inputteksten sendes fra ekko kommando i følgende eksempel. Teksten, 'Jeg kan godt lide at programmere'bliver delt som standardudskiller, plads, og det tredje ord udskrives som output.

$ echo 'Jeg kan godt lide programmering' | awk 'print $ 3'

Produktion:

Gå til indhold

akavet med at ændre skillelinjen

awk-kommandoen kan bruges til at ændre skillelinjen for ethvert filindhold. Antag, du har en tekstfil, der hedder telefon.txt med følgende indhold, hvor ':' bruges som feltadskiller af filindholdet.

telefon.txt

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

Kør følgende awk-kommando for at ændre afgrænseren, ':' ved '-' til indholdet af filen, telefon.txt.

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

Produktion:

Gå til indhold

awk med tabulatorafgrænsede data

awk-kommandoen har mange indbyggede variabler, der bruges til at læse teksten på forskellige måder. To af dem er FS og OFS. FS er inputfeltadskiller og OFS er outputfeltadskillelsesvariabler. Anvendelsen af ​​disse variabler er vist i dette afsnit. Lave en fanen separat fil navngivet input.txt med følgende indhold for at teste anvendelsen af FS og OFS variabler.

Indgang.txt

Skriptsprog på klientsiden
Scriptsprog på serversiden
Databaseserver
Webserver

Brug af FS-variabel med fane

Den følgende kommando opdeler hver linje af input.txt fil baseret på fanen ('\ t') og udskriv det første felt på hver linje.

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

Produktion:

Brug af OFS-variabel med fane

Den følgende awk-kommando udskriver 9th og 5th felter af 'ls -l' kommandooutput med faneseparator efter udskrivning af kolonnetitlen “Navn”Og“Størrelse”. Her, OFS variabel bruges til at formatere output med en fane.

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

Produktion:

Gå til indhold

awk med CSV-data

Indholdet af enhver CSV-fil kan parses på flere måder ved hjælp af kommandoen awk. Opret en CSV-fil med navnet 'kunde.csv'Med følgende indhold for at anvende awk-kommando.

kunde.txt

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

Læser enkelt felt af CSV-fil

'-F' option bruges med kommandoen awk til at indstille afgrænseren til opdeling af hver linje i filen. Den følgende awk-kommando udskriver navn felt af kunden.csv fil.

$ kat kunde.csv
$ awk -F "," 'print $ 2' kunde.csv

Produktion:

Læsning af flere felter ved at kombinere med anden tekst

Den følgende kommando udskriver tre felter med kunde.csv ved at kombinere titeltekst, Navn, e-mail og telefon. Den første linje i kunde.csv filen indeholder titlen på hvert felt. NR variabel indeholder linienummeret på filen, når kommandoen awk analyserer filen. I dette eksempel, NR variabel bruges til at udelade den første linje i filen. Outputtet viser 2nd, 3rd og 4th felter på alle linjer undtagen første linje.

$ awk -F "," 'NR> 1 print "Navn:" $ 2 ", E-mail:" $ 3 ", Telefon:" $ 4' kunde.csv

Produktion:

Læsning af CSV-fil ved hjælp af et awk-script

awk-script kan udføres ved at køre awk-fil. Hvordan du kan oprette awk-fil og køre filen vises i dette eksempel. Opret en fil med navnet awkcsv.akavet med følgende kode. BEGYNDE nøgleord bruges i scriptet til at informere awk-kommandoen om at udføre scriptet til BEGYNDE del først inden du udfører andre opgaver. Her markerer feltudskiller (FS) bruges til at definere opdelingsafgrænser og 2nd og 1St felter udskrives i henhold til det format, der bruges i funktionen printf ().

awkcsv.akavet
BEGIN FS = "," printf "% 5s (% s) \ n", $ 2, $ 1

Løb awkcsv.akavet fil med indholdet af kunden.csv fil ved hjælp af følgende kommando.

$ awk -f awkcsv.awk kunde.csv

Produktion:

Gå til indhold

awk regex

Det regulære udtryk er et mønster, der bruges til at søge i en hvilken som helst streng i en tekst. Forskellige typer af komplicerede søge- og erstatningsopgaver kan udføres meget let ved at bruge det regulære udtryk. Nogle enkle anvendelser af regulært udtryk med awk-kommando vises i dette afsnit.

Matchende tegnsæt

Den følgende kommando matcher ordet Nar eller bool eller Fedt nok med inputstrengen og udskriv, hvis ordet findes. Her, Dukke passer ikke og udskrives ikke.

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

Produktion:

Søger streng i starten af ​​linjen

'^' symbolet bruges i det regulære udtryk til at søge i ethvert mønster i starten af ​​linjen. ''Linux ' ordet søges i starten af ​​hver linje i teksten i det følgende eksempel. Her starter to linjer med teksten, 'Linux'og disse to linjer vises i output.

$ echo -e "Linux er gratis at bruge \ n Det er en open source-software \ nLinuxHint er
et populært blog-site "| awk '/ ^ Linux /'

Produktion:

Søger streng i slutningen af ​​linjen

'$' symbolet bruges i det regulære udtryk til at søge i ethvert mønster i slutningen af ​​hver linje i teksten. ''Manuskriptordet søges i det følgende eksempel. Her indeholder to linjer ordet, Manuskript i slutningen af ​​linjen.

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

Produktion:

Søgning ved at udelade et bestemt tegnsæt

'^' symbol angiver starten på teksten, når den bruges foran et strengmønster ('/ ^ ... /') eller før et tegnsæt, der er erklæret af ^ […]. Hvis den '^' symbolet bruges inde i den tredje parentes, [^…] så udelades det definerede tegnsæt inden i parentes på søgningstidspunktet. Den følgende kommando søger i ethvert ord, der ikke starter med 'F' men slutter med 'ool''. Fedt nok og bool udskrives i henhold til mønster og tekstdata.

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

Produktion:

Gå til indhold

awk case ufølsom regex

Som standard foretager almindeligt udtryk store og små bogstaver, når der søges i et mønster i strengen. Sagsfølsom søgning kan udføres med awk-kommando med det regulære udtryk. I det følgende eksempel, at sænke() funktion bruges til at foretage store og små bogstaver. Her konverteres det første ord i hver linje i inputteksten til små bogstaver ved hjælp af at sænke() funktion og matche med mønsteret for regulært udtryk. toupper () funktion kan også bruges til dette formål. I dette tilfælde skal mønsteret defineres med stort bogstav. Teksten defineret i det følgende eksempel indeholder søgeordet, web'i to linjer, der udskrives som output.

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

Produktion:

Gå til indhold

awk med NF (antal felter) variabel

NF er en indbygget variabel i awk-kommando, der bruges til at tælle det samlede antal felter i hver linje i inputteksten. Opret enhver tekstfil med flere linjer og flere ord. input.txt fil bruges her, som er oprettet i det foregående eksempel.

Brug af NF fra kommandolinjen

Her bruges den første kommando til at vise indholdet af input.txt fil og anden kommando bruges til at vise det samlede antal felter i hver linje i filen ved hjælp af NF variabel.

$ cat input.txt
$ awk 'print NF' input.txt

Produktion:

Brug af NF i awk-fil

Opret en awk-fil med navnet tælle.akavet med scriptet nedenfor. Når dette script udføres med eventuelle tekstdata, udskrives hvert linjeindhold med samlede felter som output.

tælle.akavet

udskriv $ 0
print "[Samlede felter:" NF "]"

Kør scriptet med følgende kommando.

$ awk -f tæller.awk input.txt

Produktion:

Gå til indhold

awk gensub () -funktion

getsub () er en erstatningsfunktion, der bruges til at søge streng baseret på et bestemt afgrænsnings- eller regulært udtryksmønster. Denne funktion er defineret i  'gawk' pakke, der ikke er installeret som standard. Syntaksen for denne funktion er angivet nedenfor. Den første parameter indeholder mønsteret for regulært udtryk eller søgeafgrænser, den anden parameter indeholder erstatningsteksten, den tredje parameter angiver, hvordan søgningen skal udføres, og den sidste parameter indeholder den tekst, hvor denne funktion vil blive anvendt.

Syntaks:

gensub (regexp, udskiftning, hvordan [, target])

Kør følgende kommando for at installere kæbe pakke til brug getsub () funktion med awk-kommando.

$ sudo apt-get install gawk

Opret en tekstfil med navnet 'salgsinfo.txt'med følgende indhold for at øve dette eksempel. Her er felterne adskilt af en fane.

salgsinfo.txt

Man 700000
Tirsdag 800000
Ons 750000
Tor 200000
Fre 430000
Lør 820000

Kør følgende kommando for at læse de numeriske felter i salgsinfo.txt arkiv og udskrive det samlede salgsbeløb. Her angiver den tredje parameter 'G' den globale søgning. Det betyder, at der søges i mønsteret i det fulde indhold af filen.

$ awk 'x = gensub ("\ t", "", "G", $ 2); printf x "+" END print 0 'salgsinfo.txt | bc -l

Produktion:

Gå til indhold

awk med rand () funktion

rand () funktion bruges til at generere et vilkårligt tal større end 0 og mindre end 1. Så det genererer altid et brøkantal mindre end 1. Følgende kommando genererer et tilfældigt tal i brøkdel og ganger værdien med 10 for at få et tal mere end 1. Et brøktal med to cifre efter decimaltegnet udskrives til anvendelse af printf () -funktionen. Hvis du kører følgende kommando flere gange, får du forskellige output hver gang.

$ awk 'BEGIN printf "Number er =%.2f \ n ", rand () * 10 '

Produktion:

Gå til indhold

awk brugerdefineret funktion

Alle funktioner, der er brugt i de foregående eksempler, er indbyggede funktioner. Men du kan erklære en brugerdefineret funktion i dit awk-script til at udføre en bestemt opgave.  Antag, at du vil oprette en brugerdefineret funktion til at beregne arealet af et rektangel. For at udføre denne opgave skal du oprette en fil med navnet 'areal.akavet'med følgende script. I dette eksempel er en brugerdefineret funktion navngivet areal() erklæres i scriptet, der beregner området baseret på inputparametrene og returnerer arealværdien. getline kommando bruges her til at tage input fra brugeren.

areal.akavet

# Beregn areal
funktionsområde (højde, bredde)
returhøjde * bredde

# Starter udførelse
BEGYNDE
udskriv "Indtast højdeværdien:"
getline h < "-"
udskriv "Indtast bredden:"
getline w < "-"
udskriv "Area =" areal (h, w)

Kør scriptet.

$ awk -f område.akavet

Produktion:

Gå til indhold

awk hvis eksempel

awk understøtter betingede udsagn som andre standardprogrammeringssprog. Tre typer af if-udsagn vises i dette afsnit ved hjælp af tre eksempler. Opret en tekstfil med navnet genstande.txt med følgende indhold.

genstande.txt

HDD Samsung $ 100
Mus A4Tech
Printer HP $ 200

Enkelt hvis eksempel:

den følgende kommando vil læse indholdet af genstande.txt fil og tjek 3rd feltværdi i hver linje. Hvis værdien er tom, vil den udskrive en fejlmeddelelse med linjenummeret.

$ awk 'if ($ 3 == "") print "Prisfelt mangler i linjen" NR ".txt

Produktion:

hvis-andet eksempel:

Den følgende kommando udskriver vareprisen, hvis 3rd felt findes i linjen, ellers udskriver den en fejlmeddelelse.

$ awk 'if ($ 3 == "") print "Prisfelt mangler"
ellers udskrives "vareprisen er" $ 3 ".txt

Produktion:

hvis-ellers-hvis eksempel:

Når den følgende kommando udføres fra terminalen, vil den tage input fra brugeren. Inputværdien sammenlignes med hver hvis betingelse, indtil betingelsen er sand. Hvis en betingelse bliver sand, udskrives den tilsvarende karakter. Hvis inputværdien ikke stemmer overens med nogen betingelse, udskrives den ikke.

$ awk 'BEGIN print "Indtast mærket:"
getline-mærke <  "-"
hvis (mark> = 90) udskriver "A +"
ellers hvis (mark> = 80) udskriver "A"
ellers hvis (mark> = 70) udskriver "B +"
ellers udskrive "Fail" '

Produktion:

Gå til indhold

awk variabler

Erklæringen om awk-variabel svarer til erklæringen om shell-variablen. Der er en forskel i at læse værdien af ​​variablen. '$' symbol bruges med variabelnavnet for shellvariablen til at læse værdien. Men der er ikke behov for at bruge '$' med en awk-variabel til at læse værdien.

Brug af simpel variabel:

Den følgende kommando erklærer en variabel med navnet 'site' og en strengværdi tildeles denne variabel. Værdien af ​​variablen udskrives i den næste sætning.

$ awk 'BEGIN site = "LinuxHint.com "; udskriv websted '

Produktion:

Brug af en variabel til at hente data fra en fil

Den følgende kommando søger efter ordet 'Printer' i filen genstande.txt. Hvis en linje i filen starter med 'Printer'så gemmer den værdien af 1St, 2nd og 3rd felter i tre variabler. navn og pris variabler udskrives.

$ awk '/ Printer / name = $ 1; brand = $ 2; price = $ 3; print "item name =" name;
udskrive "vare pris =" pris 'varer.txt

Produktion:

Gå til indhold

awk arrays

Både numeriske og tilknyttede arrays kan bruges i awk. Array variabel erklæring i awk er den samme som andre programmeringssprog. Nogle anvendelser af arrays vises i dette afsnit.

Associativ matrix: 

Indekset for arrayet vil være en hvilken som helst streng for det associative array.  I dette eksempel erklæres og udskrives en associerende matrix med tre elementer.

$ awk 'BEGIN
books ["Web Design"] = "Læring af HTML 5";
books ["Web Programming"] = "PHP og MySQL"
books ["PHP Framework"] = "Learning Laravel 5"
printf "% s \ n% s \ n% s \ n", bøger ["Web Design"], bøger ["Web-programmering"],
bøger ["PHP Framework"] '

Produktion:

Numerisk matrix:

Et numerisk array med tre elementer erklæres og udskrives ved at adskille fanen.

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

# udskriv matrixelementer
printf "Arrayværdier:% d \ t% d \ t% d \ n", nummer [0], nummer [1], nummer [2]; '

Produktion:

Gå til indhold

awk loop

Tre typer løkker understøttes af awk. Brugen af ​​disse sløjfer er vist her ved hjælp af tre eksempler.

Mens løkke:

mens loop, der bruges i følgende kommando, gentages 5 gange og går ud af loop for break-sætning.

$ Awk 'BEGIN n = 1; mens (n <= 10) if(n > 5) bryde; udskrive n; n ++ '

Produktion:

Til løkke:

For løkke, der bruges i følgende awk-kommando, beregner summen fra 1 til 10 og udskriver værdien.

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

Produktion:

Mens sløjfe:

en do-while-løkke med følgende kommando udskriver alle lige tal fra 10 til 5.

$ awk 'BEGIN counter = 10; udfør if (tæller% 2 == 0) udskrivningstæller; tæller--
mens (tæller> 5) '

Produktion:

Gå til indhold

akut for at udskrive den første kolonne

Den første kolonne i enhver fil kan udskrives ved hjælp af $ 1-variablen i awk. Men hvis værdien i den første kolonne indeholder flere ord, udskrives kun det første ord i den første kolonne. Ved at bruge en bestemt afgrænser kan den første kolonne udskrives korrekt. Opret en tekstfil med navnet studerende.txt med følgende indhold. Her indeholder den første kolonne teksten med to ord.

Studerende.txt

Kaniz Fatema 30th parti
Abir Hossain 35th parti
Johannes Abraham 40th parti

Kør awk-kommando uden nogen afgrænser. Den første del af den første kolonne udskrives.

$ awk 'print $ 1' studerende.txt

Kør awk-kommando med følgende afgrænser. Den fulde del af den første kolonne udskrives.

$ awk -F '\\ s \\ s' 'print $ 1' studerende.txt

Produktion:

Gå til indhold

awk at udskrive den sidste kolonne

$ (NF) variabel kan bruges til at udskrive den sidste kolonne i enhver fil. Følgende awk-kommandoer udskriver den sidste del og den fulde del af den sidste kolonne i de studerende.txt fil.

$ awk 'print $ (NF)' studerende.txt
$ awk -F '\\ s \\ s' 'print $ (NF)' studerende.txt

Produktion:

Gå til indhold

akav med grep

grep er en anden nyttig kommando af Linux til at søge efter indhold i en fil baseret på ethvert regulært udtryk. Hvordan både awk- og grep-kommandoer kan bruges sammen, vises i det følgende eksempel. grep kommando bruges til at søge information om medarbejder-id, '1002' fra den ansatte.txt fil. Outputtet fra grep-kommandoen sendes til awk som inputdata. 5% bonus tælles og udskrives baseret på løn til medarbejder-id, '1002 ' efter awk-kommando.

$ kat medarbejder.txt
$ grep '1002' medarbejder.txt | awk -F '\ t' 'print $ 2 "får $" ($ 3 * 5) / 100 "bonus"'

Produktion:

Gå til indhold

awk med BASH-fil

Ligesom andre Linux-kommandoer kan awk-kommando også bruges i et BASH-script. Opret en tekstfil med navnet kunder.txt med følgende indhold. Hver linje i denne fil indeholder oplysninger om fire felter. Disse er kundens id, navn, adresse og mobilnummer, de er adskilt af '/''.

kunder.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, Californien / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Opret en bash-fil med navnet varesøgning.bash med følgende script. Ifølge dette script tages tilstandsværdien fra brugeren og søges i kunderne.txt fil af grep kommando og videregivet til kommandoen awk som input. Awk-kommandoen læses 2nd og 4th felter i hver linje. Hvis inputværdien stemmer overens med en hvilken som helst tilstandsværdi på kunder.txt fil, så udskrives kundens navn og mobilnummer, Ellers udskrives beskeden “Ingen kunde fundet”.

varesøgning.bash

#!/ bin / bash
ekko "Indtast statens navn:"
læse tilstand
kunder = 'grep "$ state" kunder.txt | awk -F "/" 'print "Kundenavn:" $ 2, ",
Mobilnummer: "$ 4"
hvis ["$ kunder" != ""]; derefter
ekko $ kunder
andet
ekko "Ingen kunde fundet"
fi

Kør følgende kommandoer for at vise output.

$ kat kunder.txt
$ bash item_search.bash

Produktion:

Gå til indhold

akavet med sed

Et andet nyttigt søgeværktøj i Linux er sed. Denne kommando kan bruges til både søgning og erstatning af tekst i enhver fil. Følgende eksempel viser brugen af ​​awk-kommando med sed kommando. Her vil sed-kommandoen søge i alle medarbejdernavne starter med 'J'og overgår til awk-kommando som input. awk vil udskrive medarbejder navn og ID efter formatering.

$ kat medarbejder.txt
$ sed -n '/ J / p' medarbejder.txt | awk -F '\ t' 'printf "% s (% s) \ n", $ 2, $ 1'

Produktion:

Gå til indhold

Konklusion:

Du kan bruge awk-kommandoen til at oprette forskellige typer rapporter baseret på data i tabelform eller afgrænsede data efter filtrering af dataene korrekt. Håber, du vil være i stand til at lære, hvordan awk-kommandoen fungerer efter at have praktiseret eksemplerne vist i denne vejledning.

Mus Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Hvis du finder ud af, at din musemarkør hopper eller bevæger sig alene, automatisk tilfældigt, mens du skriver Windows-bærbar computer eller computer,...
Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...
Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...