20 awk eksempler

20 Awk Examples



Mange verktøy finnes i Linux -operativsystemet for å søke og generere en rapport fra tekstdata eller filer. Brukeren kan enkelt utføre mange typer søk, erstatning og rapportgenererende oppgaver ved hjelp av kommandoer awk, grep og sed. awk er ikke bare en kommando. Det er et skriptspråk som kan brukes fra både terminal- og awk -fil. Den støtter variabelen, betinget setning, matrise, sløyfer etc. som andre skriptspråk. Den kan lese hvilket som helst filinnhold linje for linje og skille feltene eller kolonnene basert på en bestemt skilletegn. Den støtter også vanlig uttrykk for å søke etter en bestemt streng i tekstinnholdet eller filen, og utfører handlinger hvis det finnes samsvar. Hvordan du kan bruke kommandoen og skriptet awk vises i denne opplæringen ved å bruke 20 nyttige eksempler.

Innhold:

  1. awk med printf
  2. awk å dele på hvitt mellomrom
  3. awk for å endre skilletegn
  4. awk med tabulatoravgrensede data
  5. awk med csv -data
  6. awk regex
  7. awk 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 loop
  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 () funksjonen brukes til å formatere utdata i de fleste programmeringsspråk. Denne funksjonen kan brukes med awk kommando for å generere forskjellige typer formaterte utganger. awk -kommandoen brukes hovedsakelig for alle tekstfiler. Lag en tekstfil med navnet ansatt.txt med innholdet gitt nedenfor der felt er atskilt med fane (‘ t’).







ansatt.txt



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.txt fil linje 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 på utgangen er mindre enn 10 tegn, blir mellomromene lagt til foran verdien.



$ awk'{printf'%10s n', $ 1}'ansatt.tekst

Produksjon:





Gå til Innhold



awk å dele på hvitt mellomrom

Standardordet eller feltseparatoren for å dele tekst er hvitt mellomrom. kommandoen awk kan ta tekstverdi som inndata på forskjellige måter. Inngangsteksten blir sendt fra kastet ut kommandoen i følgende eksempel. Teksten, ' Jeg liker programmering 'Blir delt som standard separator, rom , og det tredje ordet skrives ut som utdata.

$kastet ut 'Jeg liker programmering' | awk '{print $ 3}'

Produksjon:

Gå til Innhold

awk for å endre skilletegn

kommandoen awk kan brukes til å endre skilletegn for filinnhold. Anta at du har en tekstfil som heter phone.txt med følgende innhold der ‘:’ brukes som feltseparator for filinnholdet.

phone.txt

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

Kjør følgende awk -kommando for å endre skilletegn, ':' av '-' til innholdet i filen, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Produksjon:

Gå til Innhold

awk med tabulatoravgrensede data

kommandoen awk har mange innebygde variabler som brukes til å lese teksten på forskjellige måter. To av dem er FS og OFS . FS er inndatafelt separator og OFS er utgangsfelt separator variabler. Bruken av disse variablene er vist i denne delen. Lage en kategorien separert fil med navn input.txt med følgende innhold for å teste bruken av FS og OFS variabler.

Input.txt

Skriptspråk på klientsiden
Skriptspråk på serversiden
Databaseserver
Internett server

Bruker FS -variabel med fane

Følgende kommando vil dele hver linje av input.txt filen basert på kategorien (‘ t’) og skriv ut det første feltet på hver linje.

$awk '{print $ 1}' FS='t'input.txt

Produksjon:

Bruker OFS -variabel med fane

Følgende awk -kommando vil skrive ut 9th og 5th felt av 'Ls -l' kommandoutgang med tabulatorskille etter at kolonnenittelen er skrevet ut Navn og Størrelse . Her, OFS variabel brukes til å formatere utdataene med en fane.

$ls -de
$ls -de | awk -v OFS='t' 'BEGIN {printf'%s t%s n ',' Name ',' Size '} {print $ 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 hjelp av kommandoen awk. Lag en CSV -fil med navnet ' kunde.csv 'Med følgende innhold for å bruke awk -kommandoen.

kunde.txt

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

Leser enkeltfelt i CSV -fil

'-F' alternativet brukes med kommandoen awk for å angi skilletegn for å dele hver linje i filen. Følgende awk -kommando vil skrive ut Navn innen kunden. csv fil.

$kattkunde.csv
$awk -F ',' '{print $ 2}'kunde.csv

Produksjon:

Lese flere felt ved å kombinere med annen tekst

Følgende kommando vil skrive ut tre felt med kunde.csv ved å kombinere titteltekst, Navn, e -post og telefon . Den første linjen i kunde.csv filen inneholder tittelen på hvert felt. NEI variabel inneholder linjenummeret til filen når kommandoen awk analyserer filen. I dette eksemplet, NR variabel brukes til å utelate den første linjen i filen. Utgangen vil vise 2nd, 3rdog 4thfeltene på alle linjene bortsett fra den første linjen.

$awk -F ',' 'NR> 1 {print' Navn: '$ 2', e -post: '$ 3', telefon: '$ 4}'kunde.csv

Produksjon:

Lese CSV -fil ved hjelp av et awk -skript

awk -skript kan kjøres ved å kjøre awk -fil. Hvordan du kan lage awk -fil og kjøre filen, er vist i dette eksemplet. Lag en fil med navnet awkcsv.awk med følgende kode. BEGYNNE søkeordet brukes i skriptet for å informere awk -kommandoen for å utføre skriptet til BEGYNNE del først før du utfører andre oppgaver. Her, feltseparator ( FS ) brukes til å definere deling av skilletegn og 2ndog 1stfeltene skrives ut i henhold til formatet som brukes i printf () -funksjonen.

awkcsv.awk
BEGYNNE{FS= ','} { printf '% 5s (% s) n',$2,$1}

Løpe awkcsv.awk fil med innholdet i kunden. csv filen med følgende kommando.

$awk -fawkcsv.awk kunde.csv

Produksjon:

Gå til Innhold

awk regex

Det vanlige uttrykket er et mønster som brukes til å søke etter en streng i en tekst. Ulike typer kompliserte søke- og erstatningsoppgaver kan gjøres veldig enkelt ved å bruke det vanlige uttrykket. Noen enkle bruksområder for det regulære uttrykket med kommandoen awk er vist i denne delen.

Matchende karaktersett

Følgende kommando vil matche ordet Tull eller tull eller Kul med inndatastrengen og skriv ut hvis ordet blir funnet. Her, Dukke vil ikke matche og ikke skrive ut.

$printf 'Lure nKul nDukke nbool ' | awk '/[FbC] ool/'

Produksjon:

Søker etter streng i begynnelsen av linjen

'^' symbolet brukes i det vanlige uttrykket for å søke etter et hvilket som helst mønster i begynnelsen av linjen. ' Linux ' ord vil bli søkt i begynnelsen av hver linje i teksten i det følgende eksemplet. Her starter to linjer med teksten, 'Linux 'Og de to linjene vil bli vist i utgangen.

$kastet ut -Og 'Linux er gratis å bruke nDet er en åpen kildekode-programvare nLinuxHint er
en populær bloggside '
| awk '/^Linux/'

Produksjon:

Søker streng på slutten av linjen

'$' symbolet brukes i det vanlige uttrykket for å søke etter et hvilket som helst mønster på slutten av hver linje i teksten. ' Manus ’Det søkes etter ord i det følgende eksemplet. Her inneholder to linjer ordet, Manus på slutten av linjen.

$kastet ut -Og 'PHP -skript nJavaScript nVisuell programmering ' | awk '/Script $/'

Produksjon:

Søker ved å utelate et bestemt tegnsett

'^' symbolet indikerer starten på teksten når den brukes foran et strengmønster (‘ / ^… /’) eller før et tegnsett erklært av ^ […] . Hvis '^' symbolet brukes inne i den tredje braketten, [^...] så vil det definerte tegnsettet inne i braketten utelates ved søket. Følgende kommando søker etter et ord som ikke starter med 'F' men slutter med ‘ ool '. Kul og bool skrives ut i henhold til mønster og tekstdata.

$ printf 'Lure nKul nDukke nbool ' |awk' / [^ F] ool /'

Produksjon:

Gå til Innhold

awk ufølsom regex

Som standard foretar vanlig uttrykk store og små bokstaver når du søker etter et mønster i strengen. Ufølsom søk etter store og små bokstaver kan gjøres med awk -kommando med det regulære uttrykket. I følgende eksempel, å senke() funksjonen brukes til å søke etter store og små bokstaver. Her vil det første ordet i hver linje i inndatateksten konverteres til små bokstaver ved å bruke å senke() fungerer og matcher det vanlige uttrykksmønsteret. toupper () funksjonen kan også brukes til dette formålet, i dette tilfellet må mønsteret defineres med alle store bokstaver. Teksten som er definert i eksemplet nedenfor inneholder søkeordet, 'Web 'På to linjer som skrives ut som utskrift.

$kastet ut -Og 'Webdesign nwebutvikling nRammeverk ' | awk 'tolower ($ 0) ~ /^web /;'

Produksjon:

Gå til Innhold

awk med NF (antall felt) variabel

NF er en innebygd variabel av kommandoen awk som brukes til å telle det totale antallet felt i hver linje i inndatateksten. Lag en tekstfil med flere linjer og flere ord. input.txt filen brukes her som er opprettet i forrige eksempel.

Bruke NF fra kommandolinjen

Her brukes den første kommandoen for å vise innholdet i input.txt filen og den andre kommandoen brukes til å vise det totale antallet felt på hver linje i filen ved hjelp av NF variabel.

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

Produksjon:

Bruker NF i awk -fil

Lag en awk -fil med navnet count.awk med skriptet gitt nedenfor. Når dette skriptet vil utføres med tekstdata, blir hvert linjeinnhold med totalt felt skrevet ut som utdata.

count.awk

{skrive ut $0}
{skrive ut'[Totalt felt:'NF']'}

Kjør skriptet med følgende kommando.

$awk -fcount.awk input.txt

Produksjon:

Gå til Innhold

awk gensub () -funksjon

getub () er en substitusjonsfunksjon som brukes til å søke etter streng basert på en bestemt skilletegn eller et regulært 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økeavgrensningen, den andre parameteren inneholder erstatningsteksten, den tredje parameteren indikerer hvordan søket vil bli utført, og den siste parameteren inneholder teksten som denne funksjonen skal brukes i.

Syntaks:

gensub(regexp, erstatning, hvordan[, mål])

Kjør følgende kommando for å installere gawk pakke for bruk getub () funksjon med awk -kommando.

$ sudo apt-get install gawk

Lag en tekstfil som heter ‘ salesinfo.txt 'Med følgende innhold for å praktisere dette eksemplet. Her er feltene atskilt med en fane.

salesinfo.txt

Min 700000
Din 800000
Ons 750000
Samle 200 000
Fre 430000
Lør 820000

Kjør følgende kommando for å lese de numeriske feltene i salesinfo.txt fil og skriv ut summen av alt salgssum. Her indikerer den tredje parameteren, 'G' det globale søket. Det betyr at mønsteret vil bli søkt i hele innholdet i filen.

$awk '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} SLUTT {print 0} 'salesinfo.txt| bc -de

Produksjon:

Gå til Innhold

awk med rand () -funksjon

rad() funksjonen brukes til å generere et tilfeldig tall større enn 0 og mindre enn 1. Så det vil alltid generere et brøknummer mindre enn 1. Følgende kommando vil generere et brøkvis tilfeldig tall og multiplisere verdien med 10 for å få et tall mer enn 1. Et brøknummer med to siffer etter desimaltegnet skrives ut for å bruke printf () -funksjonen. Hvis du kjører følgende kommando flere ganger, vil du få forskjellig utgang hver gang.

$awk 'BEGIN {printf' Number is =%. 2f n ', rand ()*10}'

Produksjon:

Gå til Innhold

awk brukerdefinert funksjon

Alle funksjoner som brukes i de foregående eksemplene er innebygde funksjoner. Men du kan erklære en brukerdefinert funksjon i awk-skriptet for å utføre en bestemt oppgave. Anta at du vil opprette en egendefinert funksjon for å beregne arealet til et rektangel. For å utføre denne oppgaven, opprett en fil med navnet ' area.awk 'Med følgende skript. I dette eksemplet heter en brukerdefinert funksjon område() er deklarert i skriptet som beregner området basert på inngangsparametrene og returnerer arealverdien. getline kommandoen brukes her for å ta innspill fra brukeren.

area.awk

# Beregn areal
funksjonområde(høyde,bredde){
komme tilbakehøyde*bredde
}

# Starter utførelsen
BEGYNNE{
skrive ut'Skriv inn høydeverdien:'
getline h< '-'
skrive ut'Skriv inn verdien for bredde:'
getline m< '-'
skrive ut'Område ='område(h,i)
}

Kjør skriptet.

$awk -farea.awk

Produksjon:

Gå til Innhold

awk hvis eksempel

awk støtter betingede utsagn som andre standard programmeringsspråk. Tre typer if -setninger vises i denne delen ved å bruke tre eksempler. Lag en tekstfil med navnet items.txt med følgende innhold.

items.txt

HDD Samsung $ 100
Mus A4Tech
Skriver HP 200 dollar

Enkelt hvis eksempel :

den følgende kommandoen vil lese innholdet i items.txt filen og sjekk 3rd feltverdi på hver linje. Hvis verdien er tom, vil den skrive ut en feilmelding med linjenummeret.

$awk '{if ($ 3 ==' ') print' Prisfelt mangler i linje 'NR}'items.txt

Produksjon:

if-else eksempel:

Følgende kommando vil skrive ut vareprisen hvis 3rdfeltet finnes i linjen, ellers vil det skrive ut en feilmelding.

$ awk'{if ($ 3 ==' ') print' Prisfelt mangler '
ellers skriv ut 'vareprisen er' $ 3} '
elementer.tekst

Produksjon:

if-else-if eksempel:

Når den følgende kommandoen vil utføres fra terminalen, vil den ta input fra brukeren. Inngangsverdien vil bli sammenlignet med hver if -betingelse til betingelsen er sann. Hvis en vilkår blir sann, vil den skrive ut den tilsvarende karakteren. Hvis inngangsverdien ikke samsvarer med noen betingelse, vil den skrive ut mislykkes.

$awk 'BEGIN {print' Skriv inn merket: '
getline -merke<'-'
hvis (merke> = 90) skriv ut 'A+'
annet hvis (merke> = 80) skriver ut 'A'
ellers hvis (merke> = 70) skriv ut 'B+'
Skriv ut 'Mislykkes'} '

Produksjon:

Gå til Innhold

awk -variabler

Erklæringen om awk -variabel ligner på deklarasjonen av shell -variabelen. 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.

Ved å bruke en enkel variabel:

Følgende kommando vil deklarere en variabel som heter 'nettstedet' og en strengverdi er tilordnet den variabelen. Verdien av variabelen skrives ut i neste setning.

$awk 'BEGIN {site =' LinuxHint.com '; print site} '

Produksjon:

Bruke en variabel for å hente data fra en fil

Følgende kommando vil søke etter ordet 'Skriver' i filen items.txt . Hvis en linje i filen starter med 'Skriver ’Så lagrer den verdien av 1st , 2nd og 3rd felt i tre variabler. Navn og pris variabler skrives ut.

$ awk'/ Printer/ {name = $ 1; brand = $ 2; price = $ 3; print' item name = 'name;
print 'item price =' price} '
elementer.tekst

Produksjon:

Gå til Innhold

awk -matriser

Både numeriske og tilhørende matriser kan brukes i awk. Array variabel erklæring i awk er det samme som andre programmeringsspråk. Noen bruksområder for matriser er vist i denne delen.

Associativ matrise:

Indeksen til matrisen vil være en hvilken som helst streng for den assosiative matrisen. I dette eksemplet deklareres og skrives en assosiativ matrise med tre elementer.

$awk 'BEGYNNE {
books ['Web Design'] = 'Lær HTML 5';
books ['Web Programming'] = 'PHP og MySQL'
books ['PHP Framework'] = 'Lære Laravel 5'
printf '%s n%s n%s n', bøker ['Webdesign'], bøker ['Webprogrammering'],
bøker ['PHP Framework']} '

Produksjon:

Numerisk matrise:

En numerisk rekke med tre elementer deklareres og skrives ut ved å skille fane.

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

# skrive ut matriseelementer
printf 'Arrayverdier: %d t%d t%d n', nummer [0], nummer [1], nummer [2]; } '

Produksjon:

Gå til Innhold

awk loop

Tre typer sløyfer støttes av awk. Bruken av disse løkkene er vist her ved å bruke tre eksempler.

Mens loop:

mens sløyfe som brukes i den følgende kommandoen, vil iterere i 5 ganger og gå ut av loop for break -setningen.

$ awk 'BEGYNN {n = 1; mens (n ​​5) brytes; skrive ut n; n ++}} '

Produksjon:

For sløyfe:

For sløyfe som brukes i følgende awk -kommando, beregnes summen fra 1 til 10 og skriver ut verdien.

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

Produksjon:

Gjør-mens-sløyfe:

en do-while-sløyfe med følgende kommando vil skrive ut alle partall fra 10 til 5.

$awk 'BEGYNN {teller = 10; gjør {if (teller%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 fil kan skrives ut ved å bruke $ 1 -variabel i awk. Men hvis verdien til den første kolonnen inneholder flere ord, skrives bare det første ordet i den første kolonnen ut. Ved å bruke en spesifikk skilletegn kan den første kolonnen skrives ut riktig. Lag en tekstfil med navnet students.txt med følgende innhold. Her inneholder den første kolonnen teksten med to ord.

Students.txt

Kaniz Fatema 30thparti
Abir Hossain 35thparti
John Abraham 40thparti

Kjør kommandoen awk uten avgrensning. Den første delen av den første kolonnen skrives ut.

$awk '{print $ 1}'students.txt

Kjør kommandoen awk med følgende skilletegn. Hele delen av den første kolonnen skrives ut.

$awk -F '\ s \ s' '{print $ 1}'students.txt

Produksjon:

Gå til Innhold

awk for å skrive ut den siste kolonnen

$ (NF) variabel kan brukes til å skrive ut den siste kolonnen i en fil. Følgende awk -kommandoer vil skrive ut den siste delen og hele delen av den siste kolonnen i studentene.txt fil.

$awk '{print $ (NF)}'students.txt
$awk -F '\ s \ s' '{print $ (NF)}'students.txt

Produksjon:

Gå til Innhold

awk med grep

grep er en annen nyttig kommando for Linux for å søke etter innhold i en fil basert på et vanlig uttrykk. Hvordan både awk og grep kommandoer kan brukes sammen, er vist i følgende eksempel. grep kommandoen brukes til å søke etter informasjon om ansatt -ID, ' 1002 ' fra den ansatte.txt fil. Utdataene fra grep -kommandoen blir sendt til awk som inndata. 5% bonus telles og skrives ut basert på lønnen til ansatt -ID -en, ' 1002 ' med awk -kommando.

$kattansatt.txt
$grep '1002'ansatt.txt| awk -F 't' '{print $ 2' får $ '($ 3*5)/100' bonus '}'

Produksjon:

Gå til Innhold

awk med BASH -fil

Som andre Linux -kommandoer, kan awk -kommandoen også brukes i et BASH -skript. Lag en tekstfil med navnet customers.txt med følgende innhold. Hver linje i denne filen inneholder informasjon om fire felt. Dette er kundens ID, navn, adresse og mobilnummer de er atskilt med '/ '.

customers.txt

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 med navnet item_search.bash med følgende skript. I følge dette skriptet vil tilstandsverdien bli tatt fra brukeren og søkt inn kundene.txt fil av grep kommando og sendt til kommandoen awk som input. Awk -kommandoen vil lese 2nd og 4th feltene på hver linje. Hvis inngangsverdien samsvarer med en hvilken som helst tilstandsverdi på customers.txt filen, vil den skrive ut kundens Navn og mobilnummer Hvis ikke skrives meldingen ut Ingen kunde funnet .

item_search.bash

#!/bin/bash
kastet ut 'Skriv inn statens navn:'
lesestat
kunder=``grep '$ stat'customers.txt| awk -F '/' '{print' Kundenavn: '$ 2',
Mobilnummer: '$ 4}'
``
hvis [ '$ kunder' !='' ];deretter
kastet ut $ kunder
ellers
kastet ut 'Ingen kunde funnet'
være

Kjør følgende kommandoer for å vise utgangene.

$kattcustomers.txt
$bashitem_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 i en fil. Følgende eksempel viser bruken av awk -kommandoen med sed kommando. Her vil sed -kommandoen søke etter alle ansattnavn som begynner med ' J 'Og går til kommandoen awk som input. awk vil skrive ut ansatt Navn og ID etter formatering.

$kattansatt.txt
$sed -n '/J/p'ansatt.txt| awk -F 't' '{printf'%s (%s) n ', $ 2, $ 1}'

Produksjon:

Gå til Innhold

Konklusjon:

Du kan bruke kommandoen awk til å lage forskjellige typer rapporter basert på tabellformede eller avgrensede data etter å ha filtrert dataene riktig. Håper, du vil kunne lære hvordan awk -kommandoen fungerer etter å ha øvd på eksemplene vist i denne opplæringen.