Topp 10 AWK -eksempler

Topp 10 AWK -eksempler

20 AWK -eksempler

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:

  1. awk med printf
  2. awk å dele seg på hvitt rom
  3. awk for å endre avgrenseren
  4. awk med tab-avgrensede data
  5. AWK med CSV -data
  6. Awk Regex
  7. awk case ufølsom regex
  8. awk med NF (antall felt) variabel
  9. awk gensub () funksjon
  10. awk med rand () funksjon
  11. AWK brukerdefinert funksjon
  12. awk hvis
  13. Awk -variabler
  14. AWK -matriser
  15. awk sløyfe
  16. awk for å skrive ut den første kolonnen
  17. awk for å skrive ut den siste kolonnen
  18. awk med grep
  19. awk med bash -skriptfilen
  20. awk med sed

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 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Liver 70000

Fø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.tekst

Produksjon:

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: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Kjør følgende AWK -kommando for å endre avgrenseren, ':' av '-' til innholdet i filen, Telefon.tekst.

$ kattetelefon.tekst
$ awk '$ 1 = $ 1' fs = ":" OFS = "-" Telefon.tekst

Produksjon:

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å klientsiden
Skriptspråk på serversiden
Databaseserver
Internett server

Bruke FS -variabel med fanen

Fø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:

Bruker OFS -variabel med fanen

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, telefon
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, ​​[email protected], (542) 986-2390

Lesing 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:

Lesing av flere felt ved å kombinere med annen tekst

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:

Leser CSV -fil ved hjelp av et AWK -skript

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.awk
Begynn fs = "," printf "%5s (%s) \ n", $ 2, $ 1

Lø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:

Søker streng i starten av linjen

'^' 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:

Søker streng på slutten av linjen

'$' 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:

Søker ved å utelate et bestemt tegnsett

'^' 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.tekst
$ awk 'print nf' inngang.tekst

Produksjon:

Bruker NF i AWK -fil

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 $ 0
print "[Total Fields:" NF "]"

Kjø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 gawk

Lag 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 700000
Tir 800000
Onsdag 750000
Thu 200000
Fre 430000
Lør 820000

Kjø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ådet
funksjonsområde (høyde, bredde)
returhøyde*bredde

# Starter utførelse
BEGYNNE
Skriv ut "Skriv inn verdien av høyden:"
getline h < "-"
Skriv ut "Angi verdien av bredden:"
getline w < "-"
skriv ut "areal =" område (h, w)

Kjø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 $ 100
Mus A4Tech
Skriver HP $ 200

Enkelt 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:

If-Else-eksempel:

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"
ellers skriv ut "vareprisen er" $ 3 "varer.tekst

Produksjon:

If-Else-hvis Eksempel:

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.

Bruker enkel variabel:

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:

Bruke en variabel for å hente data fra en fil

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;
Skriv ut "varerpris =" Pris 'varer.tekst

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.

Assosiativ matrise:

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:

Numerisk matrise:

Et numerisk utvalg av tre elementer er erklært og skrevet ut ved å skille fanen.

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

# Skriv ut arrayelementer
printf "array verdier:%d \ t%d \ t%d \ n", tall [0], tall [1], tall [2]; '

Produksjon:

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 loop:

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:

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:

Do-mens Loop:

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 parti
Abir Hossain 35th parti
John Abraham 40th parti

Kjø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-7942
CA5455 / Virginia S Mota / 930 Bassel Street, Vallecito, California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Lag 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”.

item_search.bash

#!/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

Konklusjon:

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.