![Google Engineer bygger Smart Android-drevet badeværelse spejl](/f/d20c9c15dba23afc3e7034b1943c8c70.jpeg?width=100&height=100)
I Del 8 af denne Awk -serie, vi introducerede nogle kraftfulde Awk -kommandofunktioner, det vil sige variabler, numeriske udtryk og tildelingsoperatorer.
Når vi går videre, i dette segment, vil vi dække mere Awk funktioner, og det er de særlige mønstre: BEGYNDE
og ENDE
.
Disse særlige funktioner vil være nyttige, når vi forsøger at udvide og udforske flere metoder til at bygge komplekse Awk operationer.
For at komme i gang, lad os drive vores tanker tilbage til introduktionen af Awk serie, husk da vi startede denne serie, påpegede jeg, at den generelle syntaks for et kørende an Awk kommandoen er:
# awk 'script' filnavne
Og i syntaksen ovenfor er Awk script har formen:
/ mønster/ {actions}
Når du betragter mønsteret i scriptet, er det normalt et regulært udtryk, og du kan også tænke på mønster som specielle mønstre BEGYNDE
og ENDE
. Derfor kan vi også skrive en Awk kommando i nedenstående formular:
awk 'BEGIN {actions} / pattern / {actions} / pattern / {actions} ………. SLUT {actions} 'filnavne
I tilfælde af at du bruger de specielle mønstre: BEGYNDE
og ENDE
i en Awk script, er det hvad hver af dem betyder:
Og gennemførelsesstrømmen af an Awk kommandoskript, der indeholder disse særlige mønstre, er som følger:
BEGYNDE
mønster bruges i et script, alle handlinger til BEGYNDE udføres én gang, før en indtastningslinje læses.ENDE
mønster, vil handlingen / handlingerne blive udført.Du skal altid huske denne sekvens af udførelse, når du arbejder med de specielle mønstre for at opnå de bedste resultater i en Awk operation.
For at forstå det hele, lad os illustrere ved hjælp af eksemplet fra del 8, om listen over domæner, der ejes af Tecmint, som gemt i en fil med navnet domæner.txt.
news.tecmint.com. tecmint.com. linuxsay.com. windows.tecmint.com. tecmint.com. news.tecmint.com. tecmint.com. linuxsay.com. tecmint.com. news.tecmint.com. tecmint.com. linuxsay.com. windows.tecmint.com. tecmint.com.
$ cat ~/domains.txt.
I dette eksempel vil vi tælle antallet af gange domænet tecmint.com
er angivet i filen domæner.txt. Så vi skrev et lille shell -script for at hjælpe os med at gøre det ved hjælp af ideen om variabler, numeriske udtryk og tildelingsoperatorer, der har følgende indhold:
#!/bin/bash. for fil i [e -mail beskyttet]; gør hvis [-f $ fil]; derefter #udskrive filnavn ekko "Filen er: $ fil" #udskrive et nummer trinvist for hver linje, der indeholder tecmint.com awk '/^tecmint.com/ {counter+= 1; printf "%s \ n", tæller; } '$ file else #print error info incase input er ikke et fileko "$ file er ikke en fil, angiv en fil." > & 2 && afslut 1 fi. Færdig. #afslut script med exit -kode 0 i tilfælde af vellykket udførelse exit 0.
Lad os nu anvende de to særlige mønstre: BEGYNDE
og ENDE
i Awk kommando i scriptet ovenfor som følger:
Vi ændrer scriptet:
awk '/^tecmint.com/ {counter+= 1; printf "%s \ n", tæller; } '$ -fil.
Til:
awk ' BEGYNDE {print "Antallet af gange tecmint.com vises i filen er:"; } /^tecmint.com/ {counter+= 1; } ENDE {printf "%s \ n", tæller; } '$ -fil.
Efter at have foretaget ændringer i Awk kommando, ser det komplette shell -script nu sådan ud:
#!/bin/bash. for fil i [e -mail beskyttet]; gør hvis [-f $ fil]; derefter #print ud filnavn ekko "Filen er: $ file" #print det samlede antal gange tecmint.com vises i filen awk ' BEGYNDE {print "Antallet af gange tecmint.com vises i filen er:"; } /^tecmint.com/ {counter+= 1; } ENDE {printf "%s \ n", tæller; } '$ file else #print error info incase input er ikke et fileko "$ fil er ikke en fil, angiv en fil." > & 2 && afslut 1 fi. Færdig. #afslut script med exit -kode 0 i tilfælde af vellykket udførelse exit 0.
Når vi kører scriptet ovenfor, udskriver det først filens placering domæner.txt, derefter Awk kommandoskript udføres, hvor BEGYNDE
specielt mønster hjælper os med at udskrive meddelelsen “Antallet af gange tecmint.com vises i filen er:
”Før eventuelle inputlinjer læses fra filen.
Så vores mønster, /^tecmint.com/
sammenlignes med hver inputlinje og handlingen, {tæller+= 1; }
udføres for hver inputlinje, som tæller antallet af gange tecmint.com
vises i filen.
Endelig er ENDE
mønster udskriver det samlede antal gange domænet tecmint.com
vises i filen.
$ ./script.sh ~/domains.txt
Afslutningsvis gik vi mere igennem Awk funktioner, der undersøger begreberne specielt mønster: BEGYNDE
og ENDE
.
Som jeg påpegede før, vil disse Awk -funktioner hjælpe os med at bygge mere komplekse tekstfiltrering, der er mere at dække under Awk funktioner og i del 10, vi skal nærme os tanken om Awk's indbyggede variabler, så hold kontakten.