I denne artikkelen vil vi forklare den grunnleggende bruken av AWK -kommandoen og hvordan den kan brukes til å dele en fil med strenger. Vi har utført eksemplene fra denne artikkelen på et Debian 10 Buster -system, men de kan enkelt replikeres på de fleste Linux -distros.
Eksempelfilen vi skal bruke
Eksempelfilen med strenger som vi vil bruke for å demonstrere bruken av AWK -kommandoen er som følger:
Dette er hva hver kolonne i prøvefilen indikerer:
Eksempel 1: Bruk AWK til å skrive ut alle linjer i en fil
Å skrive ut hver linje i en spesifisert fil er standardoppførselen til AWK -kommandoen. I følgende syntaks for AWK -kommandoen spesifiserer vi ikke noe mønster som AWK skal skrive ut, og dermed antas kommandoen å anvende "utskrift" -handlingen på alle linjene i filen.
Syntaks:
$ awk 'print' filnavn.tekst
Eksempel:
I dette eksemplet ber jeg AWK -kommandoen om å skrive ut innholdet i eksempelfilen min, linje for linje.
$ awk 'print' sample_file.tekst
Eksempel 2: Bruk AWK for å skrive ut bare linjene som samsvarer med et gitt mønster
Med AWK kan du spesifisere et mønster, og kommandoen vil bare skrive ut linjene som samsvarer med det mønsteret.
Syntaks:
$ awk '/ mønster_to_be_matched/ print' filnavn.tekst
Eksempel:
Fra prøvefilen, hvis jeg bare vil skrive ut linjen (e) som inneholder variabelen 'B', kan jeg bruke følgende kommando:
$ awk '/ b/ print' sample_file.tekst
For å gjøre eksemplet mer meningsfylt, la meg bare skrive ut informasjonen om ansatte som er 'professor.
$ awk '/ professor/ print' sample_file.tekst
Kommandoen skriver bare ut linjene/oppføringene som inneholder strengen “Professor”, og vi har mer verdifull informasjon hentet fra dataene.
Eksempel 3. Bruk AWK for å dele filen slik at bare spesifikke felt/kolonner skrives ut
I stedet for å skrive ut hele filen, kan du lage AWK for å skrive ut bare spesifikke kolonner i filen. AWK behandler alle ord, atskilt med hvitt rom, i en linje som en kolonnepost som standard. Den lagrer posten i en $ n variabel. Der $ 1 representerer det første ordet, lagrer $ 2 det andre ordet, $ 3 det fjerde, og så videre. $ 0 lagrer hele linjen slik at WHO -linjen skrives ut, som forklart i eksempel 1.
Syntaks:
$ awk 'print $ n, .. .' filnavn.tekst
Eksempel:
Følgende kommando vil bare skrive ut den første kolonnen (navnet) og den andre kolonnen (emnet) i eksempelfilen min:
$ awk 'skriv ut $ 1, $ 2' Sample_file.tekst
Eksempel 4: Bruk AWK for å telle og skrive ut antall linjer der et mønster blir matchet
Du kan be AWK om å telle antall linjer der et spesifisert mønster blir matchet og deretter sende ut at 'telle'.
Syntaks:
$ awk '/mønster_to_be_matched/++ cnt end print "count =", cnt'
filnavn.tekst
Eksempel:
I dette eksemplet vil jeg telle antall personer som underviser i emnet "engelsk". Derfor vil jeg fortelle AWK -kommandoen om å matche mønsteret “engelsk” og skrive ut antall linjer der dette mønsteret er matchet.
$ awk '/engelsk/++ cnt end print "count =", cnt' sample_file.tekst
Tellingen her antyder at 2 personer underviser i engelsk fra eksempler på filoppføringer.
Eksempel 5: Bruk AWK for å skrive ut bare linjer med mer enn et bestemt antall tegn
For denne oppgaven vil vi bruke den innebygde AWK-funksjonen som kalles “lengde”. Denne funksjonen returnerer lengden på inngangsstrengen. Så hvis vi vil at AWK skal skrive ut bare linjer med mer enn, eller til og med mindre enn antall tegn, kan vi bruke lengdefunksjonen på følgende måte:
For å skrive ut linjer med tegn større enn et tall:
$ awk 'lengde ($ 0)> n' filnavn.tekst
For å skrive ut linjer med tegn mindre enn et tall:
$ awk 'lengde ($ 0) < n' filename.txt
Hvor n er antall tegn du vil spesifisere for en linje.
Eksempel:
Følgende kommando vil bare skrive ut linjene fra eksempelfilen min som har tegn mer enn 30:
$ awk 'lengde ($ 0)> 30' Sample_file.tekst
Eksempel 6: Bruk AWK for å lagre kommandoproduksjonen til en annen fil
Ved å bruke omdirigeringsoperatøren '>', kan du bruke AWK -kommandoen til å skrive ut utdataene til en annen fil. Dette er slik du kan bruke det:
$ awk 'criteria_to_print "filnavn.txt> outputfile.tekst
Eksempel:
I dette eksemplet vil jeg bruke omdirigeringsoperatøren med min AWK -kommando for å skrive ut bare navnene på de ansatte (kolonne 1) til en ny fil:
$ awk 'print $ 1' sample_file.TXT> Employee_names.tekst
Jeg bekreftet gjennom CAT -kommandoene at den nye filen bare inneholder navnene på de ansatte.
Eksempel 7: Bruk AWK for å skrive ut bare ikke-tomme linjer fra en fil
AWK har noen innebygde kommandoer som du kan bruke til å filtrere utgangen. For eksempel brukes NF -kommandoen for å holde en telling av feltene innenfor den nåværende inngangsoppføringen. Her vil vi bruke NF-kommandoen til å skrive ut bare de ikke-tomme linjene i filen:
$ awk 'nf> 0' sample_file.tekst
Det er klart at du kan bruke følgende kommando til å skrive ut de tomme linjene:
$ awk 'nf < 0' sample_file.txt
Eksempel 8: Bruk AWK for å telle de totale linjene i en fil
En annen innebygd funksjon kalt NR holder en telling av antall inngangsposter (vanligvis linjer) av en gitt fil. Du kan bruke denne funksjonen i AWK som følge for å telle antall linjer i en fil:
$ awk 'end print nr' sample_file.tekst
Dette var den grunnleggende informasjonen du trenger for å starte med delingsfiler med AWK -kommandoen. Du kan bruke kombinasjonen av disse eksemplene for å hente mer meningsfull informasjon fra filfilen din gjennom AWK.