Awk

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 fin måte å behandle og analysere en strengfil. 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 å:

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-distribusjoner.

Eksempelfilen vi skal bruke

Eksempelfilen til strengene vi skal bruke for å demonstrere bruken av awk-kommandoen er som følger:

Dette er hva hver kolonne i eksempelfilen indikerer:

Eksempel 1: Bruk Awk til å skrive ut alle linjene i en fil

Utskrift av hver linje i en spesifisert fil er standard oppførsel for awk-kommandoen. I den følgende syntaksen for awk-kommandoen spesifiserer vi ikke noe mønster som awk skal skrive ut, og derfor skal kommandoen bruke "print" -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 til å 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 '/ pattern_to_be_matched / print' filnavn.tekst

Eksempel:

Fra eksempelfilen, 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", slik at vi har mer verdifull informasjon hentet fra dataene.

Eksempel 3. Bruk awk til å dele filen slik at bare spesifikke felt / kolonner skrives ut

I stedet for å skrive ut hele filen, kan du gjøre det vanskelig å skrive ut bare bestemte kolonner i filen. Awk behandler alle ord, atskilt med mellomrom, i en linje som en kolonneoppføring 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 hvem-linjen skrives ut, som forklart i eksempel 1.

Syntaks:

$ awk 'skriv ut $ N, .. .' filnavn.tekst

Eksempel:

Følgende kommando vil bare skrive ut den første kolonnen (navn) og den andre kolonnen (emne) i eksempelfilen min:

$ awk 'print $ 1, $ 2' sample_file.tekst

Eksempel 4: Bruk Awk til å telle og skrive ut antall linjer som et mønster samsvarer med

Du kan fortelle awk å telle antall linjer som et spesifisert mønster samsvarer med, og deretter sende det 'count'.

Syntaks:

$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'
filnavn.tekst

Eksempel:

I dette eksemplet vil jeg telle antall personer som underviser i faget "engelsk". Derfor vil jeg be awk-kommandoen om å matche mønsteret "engelsk" og skrive ut antall linjer som dette mønsteret samsvarer med.

$ awk '/ engelsk / ++ cnt END print "Count =", cnt' sample_file.tekst

Tellingen her antyder at to personer underviser i engelsk fra eksempelfilene.

Eksempel 5: Bruk awk til å skrive ut bare linjer med mer enn et spesifikt antall tegn

For denne oppgaven vil vi bruke den innebygde awk-funksjonen kalt "lengde". Denne funksjonen returnerer lengden på inngangsstrengen. Dermed, hvis vi vil ha det vanskelig å skrive ut linjer med mer enn, eller til og med mindre enn, antall tegn, kan vi bruke lengdefunksjonen på følgende måte:

For utskrift av linjer med tegn som er 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 mer enn 30 tegn:

$ awk 'lengde ($ 0)> 30' sample_file.tekst

Eksempel 6: Bruk awk for å lagre kommandoutgangen i en annen fil

Ved å bruke omdirigeringsoperatøren '>' kan du bruke awk-kommandoen til å skrive ut utdataene til en annen fil. Slik kan du bruke den:

$ awk 'criteria_to_print "filnavn.txt> utdatafil.tekst

Eksempel:

I dette eksemplet vil jeg bruke viderekoblingsoperatø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> ansatt_navn.tekst

Jeg bekreftet gjennom kattkommandoene at den nye filen bare inneholder navnene på de ansatte.

Eksempel 7: Bruk awk til å skrive ut bare ikke-tomme linjer fra en fil

Awk har noen innebygde kommandoer som du kan bruke til å filtrere utdataene. For eksempel brukes NF-kommandoen til å holde en telling av feltene innenfor gjeldende inngangspost. Her vil vi bruke NF-kommandoen til å skrive ut bare de ikke-tomme linjene i filen:

$ awk 'NF> 0' sample_file.tekst

Åpenbart kan du bruke følgende kommando til å skrive ut de tomme linjene:

$ awk 'NF < 0' sample_file.txt

Eksempel 8: Bruk awk til å telle de totale linjene i en fil

En annen innebygd funksjon kalt NR teller antall inngangsposter (vanligvis linjer) for en gitt fil. Du kan bruke denne funksjonen i awk som følger for å telle antall linjer i en fil:

$ awk 'END print NR' sample_file.tekst

Dette var den grunnleggende informasjonen du trenger for å starte med å dele filer med kommandoen awk. Du kan bruke kombinasjonen av disse eksemplene for å hente mer meningsfull informasjon fra filen din med strengene gjennom awk.

Installer det siste OpenRA-strategispillet på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spillmotor som gjenskaper de tidlige Westwood-spillene som den klassiske Command & Conquer: Red Alert. Di...
Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...