Det finnes mange verktøyverktøy i Linux -operativsystemet for å søke og generere en rapport fra tekstdata eller fil. Brukeren kan enkelt utføre mange typer søk, erstatte og rapportere generering av oppgaver ved å bruke AWK, grep og SED -kommandoer. AWK er ikke bare en kommando. Det er et skriptspråk som kan brukes fra både terminal- og AWK -filen. Den støtter variabel, betinget uttalelse, matrise, løkker osv. som andre skriptspråk. Den kan lese hvilken som helst filinnholdslinje for linje og skille feltene eller kolonnene basert på en spesifikk avgrenser. Den støtter også regelmessig uttrykk for å søke i en bestemt streng i tekstinnholdet eller filen og tar handlinger hvis noen samsvarsstifter. Hvordan du kan bruke AWK -kommando og skript vises i denne opplæringen ved å bruke 20 nyttige eksempler.
Innhold:
Bruker AWK med printf
printf () Funksjon brukes til å formatere en hvilken som helst utdata i de fleste av programmeringsspråk. Denne funksjonen kan brukes med awk Kommando for å generere forskjellige typer formaterte utganger. AWK -kommando brukt hovedsakelig til en tekstfil. Lag en tekstfil som heter ansatt.tekst med innholdet gitt nedenfor der felt er atskilt med fanen ('\ t').
ansatt.tekst
1001 John Sena 40000Følgende AWK -kommando vil lese data fra ansatt.tekst fillinje for linje og skriv ut den første arkiverte etter formatering. Her, “%10S \ n”Betyr at utgangen vil være 10 tegn lang. Hvis verdien av utgangen er mindre enn 10 tegn, vil mellomrommene bli lagt til foran verdien.
$ awk 'printf "%10s \ n", $ 1' ansatt.tekstProduksjon:
Gå til innhold
awk å dele seg på hvitt rom
Standard ord eller feltskillelse for å dele opp en hvilken som helst tekst er hvitt rom. AWK -kommando kan ta tekstverdi som inngang på forskjellige måter. Inngangsteksten sendes fra ekko Kommando i følgende eksempel. Teksten, 'Jeg liker programmering'vil bli delt som standard separator, rom, og det tredje ordet vil bli skrevet ut som utgang.
$ ekko 'Jeg liker programmering' | awk 'skriv ut $ 3'
Produksjon:
Gå til innhold
awk for å endre avgrenseren
AWK -kommando kan brukes til å endre avgrenseren for ethvert filinnhold. Anta at du har en tekstfil som heter Telefon.tekst med følgende innhold der ':' brukes som feltskillelse av filinnholdet.
Telefon.tekst
+123: 334: 889: 778Kjør følgende AWK -kommando for å endre avgrenseren, ':' av '-' til innholdet i filen, Telefon.tekst.
$ kattetelefon.tekstProduksjon:
Gå til innhold
awk med tab-avgrensede data
AWK-kommando har mange innebygde variabler som brukes til å lese teksten på forskjellige måter. To av dem er Fs og OFS. Fs er inngangsfeltskillelse og OFS er variabler for utgangsfelt separator. Bruken av disse variablene vises i denne delen. Lage en Tab Adskilt fil som heter inngang.tekst med følgende innhold for å teste bruken av Fs og OFS variabler.
Inngang.tekst
Skriptspråk på klientsidenFølgende kommando vil dele hver linje av inngang.tekst fil basert på fanen ('\ t') og skriv ut det første feltet på hver linje.
$ awk 'print $ 1' fs = '\ t' input.tekst
Produksjon:
Følgende AWK -kommando vil skrive ut 9th og 5th felt av 'ls -l' Kommandoutgang med fane -separator etter å ha skrevet ut kolonnetittelen “Navn”Og“Størrelse”. Her, OFS Variabel brukes til å formatere utdataene med en fane.
$ ls -l
$ ls -l | awk -v ofs = '\ t' 'Begynn printf "%s \ t%s \ n", "name", "størrelse" skriv ut $ 9, $ 5'
Produksjon:
Gå til innhold
AWK med CSV -data
Innholdet i en hvilken som helst CSV -fil kan analyseres på flere måter ved å bruke AWK -kommando. Opprett en CSV -fil som heter 'kunde.CSV'Med følgende innhold for å bruke AWK -kommando.
kunde.tekst
ID, navn, e -post, telefonLesing av enkeltfelt av CSV -fil
'-F' Alternativet brukes med AWK -kommando for å angi avgrenseren for å dele opp hver linje i filen. Følgende AWK -kommando vil skrive ut Navn innen kunden.CSV fil.
$ CAT -kunde.CSV
$ awk -f "," 'skriv ut $ 2' kunde.CSV
Produksjon:
Følgende kommando vil skrive ut tre felt av kunde.CSV ved å kombinere titteltekst, Navn, e -post og telefon. Den første linjen i kunde.CSV Filen inneholder tittelen på hvert felt. Nr Variabel inneholder linjenummeret til filen når AWK -kommandoen analyserer filen. I dette eksemplet, NR Variabel brukes til å utelate den første linjen i filen. Utgangen vil vise 2nd, 3Rd og 4th felt av alle linjer bortsett fra den første linjen.
$ awk -f "," 'nr> 1 print "navn:" $ 2 ", e -post:" $ 3 ", telefon:" $ 4 "kunde.CSV
Produksjon:
AWK -skript kan utføres ved å kjøre AWK -fil. Hvordan du kan opprette AWK -fil og kjøre filen vises i dette eksemplet. Lag en fil som heter awkcsv.awk med følgende kode. BEGYNNE nøkkelord brukes i skriptet for å informere AWK -kommandoen for å utføre skriptet til BEGYNNE Del først før du utfører andre oppgaver. Her, feltskiller (Fs) brukes til å definere splitting avgrenser og 2nd og 1st Felt vil bli skrevet ut i henhold til formatet som brukes i printf () -funksjonen.
awkcsv.awkLøpe awkcsv.awk fil med innholdet i kunden.CSV fil etter følgende kommando.
$ awk -f awkcsv.awk kunde.CSV
Produksjon:
Gå til innhold
Awk Regex
Det vanlige uttrykket er et mønster som brukes til å søke i en hvilken som helst streng i en tekst. Ulike typer kompliserte søk og erstatt oppgaver kan gjøres veldig enkelt ved å bruke det vanlige uttrykket. Noen enkle bruksområder av det vanlige uttrykket med AWK -kommando vises i denne delen.
Matchende karaktersett
Følgende kommando vil matche ordet Tosk eller bool eller Kul med inngangsstrengen og skriv ut hvis ordet grunnlegger. Her, Dukke vil ikke matche og ikke skrive ut.
$ printf "Fool \ ncool \ ndoll \ nbool" | awk '/[fbc] ool/'
Produksjon:
'^' Symbol brukes i det vanlige uttrykket for å søke på ethvert mønster ved start av linjen. 'Linux ' Ordet blir søkt ved starten av hver linje i teksten i følgende eksempel. Her starter to linjer med teksten, 'Linux'Og de to linjene vil bli vist i utgangen.
$ ekko -e "Linux er gratis å bruke \ n Det er en open source -programvare \ nlinuxhint er
et populært bloggside "| awk '/^linux/'
Produksjon:
'$' Symbol brukes i det vanlige uttrykket for å søke på ethvert mønster på slutten av hver linje i teksten. 'Manus'Ordet søkes i følgende eksempel. Her inneholder to linjer ordet, Manus På slutten av linjen.
$ ekko -e "php script \ njavaScript \ nvisual programmering" | awk '/script $/'
Produksjon:
'^' Symbol indikerer start av teksten når den brukes foran et hvilket som helst strengmønster (' /^… /') eller før noe karaktersett erklært av ^[…]. Hvis '^' Symbol brukes inne i den tredje braketten, [^…] Da vil det definerte tegnsettet inne i braketten bli utelatt på søknadstidspunktet. Følgende kommando vil søke i ethvert ord som ikke begynner med 'F' men slutter med 'OOL'. Kul og bool vil bli skrevet ut i henhold til mønster- og tekstdataene.
$ printf "Fool \ ncool \ ndoll \ nbool" | awk '/[^f] ool/'Produksjon:
Gå til innhold
awk case ufølsom regex
Som standard gjør vanlig uttrykk etterfølgende søk når du søker i et mønster i strengen. Case Ufølsom søk kan gjøres ved AWK -kommando med det vanlige uttrykket. I det følgende eksemplet, å senke() Funksjon brukes til å gjøre saker ufølsom søk. Her vil det første ordet i hver linje i inngangsteksten bli konvertert til små bokstaver ved å bruke å senke() funksjon og match med det vanlige uttrykksmønsteret. Toupper () Funksjon kan også brukes til dette formålet, i dette tilfellet må mønsteret defineres av all store bokstav. Teksten definert i følgende eksempel inneholder det søkeordet, 'Web'I to linjer som vil bli skrevet ut som utgang.
$ ekko -e "Web Design \ nweb Development \ nFramework" | awk 'tolower ($ 0) ~ /^web /;'
Produksjon:
Gå til innhold
awk med NF (antall felt) variabel
Nf er en innebygd variabel av AWK-kommandoen som brukes til å telle det totale antallet felt i hver linje i inngangsteksten. Lag hvilken som helst tekstfil med flere linjer og flere ord. inngangen.tekst Fil brukes her som er opprettet i forrige eksempel.
Bruker NF fra kommandolinjen
Her brukes den første kommandoen til å vise innholdet i inngang.tekst fil og andre kommando brukes til å vise det totale antall felt i hver linje i filen ved hjelp av Nf variabel.
$ kattinngang.tekstProduksjon:
Lag en AWK -fil som heter telle.awk med manuset gitt nedenfor. Når dette skriptet vil utføres med eventuelle tekstdata, vil hvert linjeinnhold med totale felt bli skrevet ut som utdata.
telle.awk
Skriv ut $ 0Kjør skriptet etter følgende kommando.
$ awk -f teller.awk input.tekst
Produksjon:
Gå til innhold
awk gensub () funksjon
getSub () er en substitusjonsfunksjon som brukes til å søke i streng basert på bestemt avgrenser eller vanlig uttrykksmønster. Denne funksjonen er definert i 'Gawk' pakke som ikke er installert som standard. Syntaksen for denne funksjonen er gitt nedenfor. Den første parameteren inneholder det vanlige uttrykksmønsteret eller søkende avgrenser, den andre parameteren inneholder erstatningsteksten, den tredje parameteren indikerer hvordan søket skal gjøres og den siste parameteren inneholder teksten der denne funksjonen vil bli brukt.
Syntaks:
Gensub (regexp, erstatning, hvordan [, mål])
Kjør følgende kommando for å installere gawk pakke for bruk getSub () Funksjon med AWK -kommando.
$ sudo apt-get install gawkLag en tekstfil som heter 'Salesinfo.tekst'Med følgende innhold for å øve på dette eksemplet. Her er feltene atskilt med en fane.
Salesinfo.tekst
Man 700000Kjør følgende kommando for å lese de numeriske feltene i Salesinfo.tekst fil og skriv ut totalen av alt salgsbeløp. Her indikerer den tredje parameteren, 'G' det globale søket. Det betyr at mønsteret vil bli søkt i det fulle innholdet i filen.
$ awk 'x = gensub ("\ t", "", "g", $ 2); printf x "+" slutt print 0 'SalesInfo.txt | BC -L
Produksjon:
Gå til innhold
awk med rand () funksjon
Rand () Funksjon brukes til å generere noe tilfeldig tall større enn 0 og mindre enn 1. Så det vil alltid generere et brøkdeltall mindre enn 1. Følgende kommando vil generere et fraksjonelt tilfeldig tall og multiplisere verdien med 10 for å få et tall mer enn 1. Et brøknummer med to sifre etter desimalpunktet vil bli skrevet ut for å bruke printf () -funksjon. Hvis du kjører følgende kommando flere ganger, vil du få en annen utdata hver gang.
$ awk 'begynn printf "nummer er =%.2f \ n ", rand ()*10 '
Produksjon:
Gå til innhold
AWK brukerdefinert funksjon
Alle funksjoner som brukes i de forrige eksemplene er innebygde funksjoner. Men du kan erklære en brukerdefinert funksjon i AWK-skriptet ditt for å gjøre en bestemt oppgave. Anta at du vil lage en tilpasset funksjon for å beregne området til et rektangel. For å gjøre denne oppgaven, lage en fil som heter 'område.awk'Med følgende skript. I dette eksemplet er en brukerdefinert funksjon som heter område() er erklært i skriptet som beregner området basert på inngangsparametrene og returnerer områdeverdien. getline Kommando brukes her for å ta innspill fra brukeren.
område.awk
# Beregn områdetKjør manuset.
$ awk -f område.awk
Produksjon:
Gå til innhold
awk hvis eksempel
AWK støtter betingede uttalelser som andre standardprogrammeringsspråk. Tre typer IF -uttalelser vises i dette avsnittet ved å bruke tre eksempler. Lag en tekstfil som heter gjenstander.tekst Med følgende innhold.
gjenstander.tekst
HDD Samsung $ 100Enkelt hvis eksempel:
han følger kommandoen vil lese innholdet i gjenstander.tekst fil og sjekk 3Rd feltverdi i hver linje. Hvis verdien er tom, vil den skrive ut en feilmelding med linjenummeret.
$ awk 'if ($ 3 == "") Print "Prisfeltet mangler i kø" NR' -artikler.tekst
Produksjon:
Følgende kommando vil skrive ut vareprisen hvis 3Rd Felt eksisterer i linjen, ellers vil det skrive ut en feilmelding.
$ awk 'if ($ 3 == "") utskrift "Prisfeltet mangler"Produksjon:
Når følgende kommando vil utføre fra terminalen, vil den ta innspill fra brukeren. Inngangsverdien vil bli sammenlignet med hver hvis tilstand til tilstanden er sann. Hvis noen tilstand blir sann, vil den skrive ut tilsvarende karakter. Hvis inngangsverdien ikke stemmer overens med noen tilstand, vil den skrive ut mislykkes.
$ awk 'Begynn skriv ut "Enter the Mark:"
Getline Mark < "-"
if (marker> = 90) skriv ut "a+"
ellers hvis (marker> = 80) skriv ut "a"
ellers hvis (marker> = 70) skriv ut "b+"
ellers skriv ut "mislykkes" "
Produksjon:
Gå til innhold
Awk -variabler
Erklæringen om AWK -variabel ligner på erklæringen om skallvariabelen. Det er en forskjell i å lese verdien av variabelen. '$' -symbol brukes med variabelnavnet for skallvariabelen for å lese verdien. Men det er ikke nødvendig å bruke '$' med AWK -variabel for å lese verdien.
Følgende kommando vil erklære en variabel som er navngitt 'nettstedet' og en strengverdi er tilordnet den variabelen. Verdien på variabelen skrives ut i neste uttalelse.
$ awk 'begynn site = "linuxhint.com "; utskriftsside '
Produksjon:
Følgende kommando vil søke i ordet 'Skriver' i filen gjenstander.tekst. Hvis noen linje i filen starter med 'Skriver'da vil det lagre verdien av 1st, 2nd og 3Rd felt i tre variabler. Navn og pris Variabler vil bli skrevet ut.
$ awk '/ printer/ name = $ 1; merke = $ 2; pris = $ 3; print "item name =" name;Produksjon:
Gå til innhold
AWK -matriser
Både numeriske og tilhørende matriser kan brukes i AWK. Array Variable Declaration in AWK er den samme for andre programmeringsspråk. Noen bruksområder av matriser vises i denne delen.
Indeksen for matrisen vil være hvilken som helst streng for assosiativ matrise. I dette eksemplet er et assosiativt utvalg av tre elementer erklært og trykt.
$ awk 'begynn
Bøker ["Web Design"] = "Lære HTML 5";
bøker ["Web programmering"] = "PHP og MySQL"
Bøker ["PHP Framework"] = "Learning Laravel 5"
printf "%s \ n%s \ n%s \ n", bøker ["webdesign"], bøker ["webprogrammering"],
Bøker ["PHP Framework"] '
Produksjon:
Et numerisk utvalg av tre elementer er erklært og skrevet ut ved å skille fanen.
$ awk 'begynnProduksjon:
Gå til innhold
awk sløyfe
Tre typer løkker støttes av AWK. Bruken av disse løkkene vises her ved å bruke tre eksempler.
Mens sløyfe som brukes i følgende kommando vil iterere i 5 ganger og gå ut fra løkken for bruddserklæring.
$ awk 'begynn n = 1; mens (n 5) bryte; skriv ut n; n ++ '
Produksjon:
For sløyfe som brukes i følgende AWK -kommando vil beregne summen fra 1 til 10 og skrive ut verdien.
$ awk 'begynn sum = 0; for (n = 1; n <= 10; n++) sum=sum+n; print sum '
Produksjon:
En do-mens-sløyfe av følgende kommando vil skrive ut alle jevnnumre fra 10 til 5.
$ awk 'begynn counter = 10; do if (counter%2 == 0) utskriftsteller; disk--
mens (teller> 5) '
Produksjon:
Gå til innhold
awk for å skrive ut den første kolonnen
Den første kolonnen i en hvilken som helst fil kan skrives ut ved å bruke $ 1 variabel i AWK. Men hvis verdien av den første kolonnen inneholder flere ord, er det bare det første ordet i den første kolonnen utskrifter. Ved å bruke en spesifikk avgrenser, kan den første kolonnen skrives ut riktig. Lag en tekstfil som heter studenter.tekst Med følgende innhold. Her inneholder den første kolonnen teksten til to ord.
Studenter.tekst
Kaniz Fatema 30th partiKjør AWK -kommando uten avgrensning. Den første delen av den første kolonnen blir skrevet ut.
$ awk 'skriv ut $ 1' studenter.tekst
Kjør AWK -kommando med følgende avgrenser. Hele delen av den første kolonnen vil bli skrevet ut.
$ awk -f '\\ s \\ s' 'skriv ut $ 1' studenter.tekst
Produksjon:
Gå til innhold
awk for å skrive ut den siste kolonnen
$ (NF) Variabel kan brukes til å skrive ut den siste kolonnen i hvilken som helst fil. Følgende AWK -kommandoer vil skrive ut den siste delen og hele delen av den siste kolonnen i studentene.tekst fil.
$ awk 'print $ (nf)' studenter.tekst
$ awk -f '\\ s \\ s' 'print $ (nf)' studenter.tekst
Produksjon:
Gå til innhold
awk med grep
grep er en annen nyttig kommando av Linux for å søke innhold i en fil basert på ethvert vanlig uttrykk. Hvordan både AWK- og GREP -kommandoer kan brukes sammen vises i følgende eksempel. grep Kommando brukes til å søke på informasjon om ansattes ID, '1002' fra den ansatte.tekst fil. Utgangen fra GREP -kommandoen vil bli sendt til AWK som inndata. 5% bonus vil bli talt og skrevet ut basert på lønnen til ansattes ID, '1002 ' av AWK -kommando.
$ katt ansatt.tekst
$ grep '1002' ansatt.txt | awk -f '\ t' 'print $ 2 "vil få $" ($ 3*5)/100 "bonus"'
Produksjon:
Gå til innhold
awk med bash -fil
Som annen Linux -kommando, kan AWK -kommando også brukes i et bash -skript. Lag en tekstfil som heter Kunder.tekst Med følgende innhold. Hver linje i denne filen inneholder informasjon på fire felt. Dette er kundens ID, navn, adresse og mobilnummer de er atskilt av '/'.
Kunder.tekst
AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942Lag en bash -fil som heter item_search.bash med følgende skript. I følge dette skriptet vil tilstandsverdien bli hentet fra brukeren og søkt inn kundene.tekst fil av grep kommando og gitt til AWK -kommandoen som inndata. AWK -kommandoen vil lese 2nd og 4th Felt i hver linje. Hvis inngangsverdien stemmer overens med noen tilstandsverdi på Kunder.tekst fil da vil den skrive ut kundens Navn og mobilnummer, Ellers vil den skrive ut meldingen “Ingen kunder funnet”.
#!/bin/bash
Ekko "Skriv inn statens navn:"
Les tilstand
kunder = 'grep' $ state 'kunder.txt | awk -f "/" 'skriv ut "Kundenavn:" $ 2, ",
Mobilnummer: "$ 4 ''
Hvis ["$ kunder" != ""]; deretter
Echo $ kunder
ellers
ekko "Ingen kunder funnet"
fi
Kjør følgende kommandoer for å vise utgangene.
$ kattekunder.tekst
$ bash item_search.bash
Produksjon:
Gå til innhold
awk med sed
Et annet nyttig søkeverktøy for Linux er sed. Denne kommandoen kan brukes til både å søke og erstatte tekst på hvilken som helst fil. Følgende eksempel viser bruk av AWK -kommando med sed kommando. Her vil SED -kommandoen søke i alle ansattes navn starter med 'J'Og går til AWK -kommando som inndata. AWK vil trykke ansatt Navn og Id Etter formatering.
$ katt ansatt.tekst
$ sed -n '/j/p' ansatt.txt | awk -f '\ t' 'printf "%s (%s) \ n", $ 2, $ 1'
Produksjon:
Gå til innhold
Du kan bruke AWK -kommando til å lage forskjellige typer rapporter basert på alle tabellformede eller avgrensede data etter å ha filtrert dataene riktig. Håper, du vil kunne lære hvordan AWK -kommandoen fungerer etter å ha praktisert eksemplene som vises i denne opplæringen.