Hvordan dele en fil med strenger med AWK

Hvordan dele en fil med strenger med AWK
Linux AWK -kommandoen (forkortet fra navnene på utviklerne; Aho, Weinberger og Kernighan) er en flott måte å behandle og analysere en fil med strenger. For at filene skal være mer informative, må de organiseres i form av rader og kolonner. Deretter kan du bruke AWK på disse filene til:
  • Skann filene, linje for linje.
  • Del hver linje i felt/kolonner.
  • Spesifiser mønstre og sammenligne linjene i filen med disse mønstrene
  • Utføre forskjellige handlinger på linjene som samsvarer med et gitt mønster

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:

  • Den første spalten inneholder navnet på ansatte/lærere på en skole
  • Den andre kolonnen inneholder emnet som den ansatte lærer
  • Den tredje spalten indikerer om den ansatte er professor eller assistentprofessor
  • Den fjerde kolonnen inneholder lønnen til den ansatte

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.