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:
- awk med printf
- akavet at opdele på hvidt rum
- akavet med at ændre skillelinjen
- awk med tabulatorafgrænsede data
- awk med csv-data
- awk regex
- awk case ufølsom regex
- awk med nf (antal felter) variabel
- awk gensub () -funktion
- awk med rand () funktion
- awk brugerdefineret funktion
- akavet hvis
- awk variabler
- awk arrays
- awk loop
- akut for at udskrive den første kolonne
- awk at udskrive den sidste kolonne
- akav med grep
- awk med bash-scriptfilen
- 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 400001002 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.txtProduktion:
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å klientsidenScriptsprog 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.txtProduktion:
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, telefon1, 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.csvProduktion:
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.akavetBEGIN 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.csvProduktion:
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ætDen 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 eret 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 $ 0print "[Samlede felter:" NF "]"
Kør scriptet med følgende kommando.
$ awk -f tæller.awk input.txtProduktion:
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 gawkOpret 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 700000Tirsdag 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 -lProduktion:
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 arealfunktionsområ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.akavetProduktion:
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 $ 100Mus 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 ".txtProduktion:
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 'BEGINbooks ["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 'BEGINnummer [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 partiAbir 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.txtKør awk-kommando med følgende afgrænser. Den fulde del af den første kolonne udskrives.
$ awk -F '\\ s \\ s' 'print $ 1' studerende.txtProduktion:
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-7942CA5455 / 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 / bashekko "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.