Awk

Sådan opdeles en strengstreng med Awk

Sådan opdeles en strengstreng med Awk
Linux awk-kommandoen (forkortet fra navnene på udviklerne; Aho, Weinberger og Kernighan) er en fantastisk måde at behandle og analysere en strengstreng på. For at filerne skal være mere informative, skal de organiseres i form af rækker og kolonner. Derefter kan du bruge awk på disse filer til:

I denne artikel vil vi forklare den grundlæggende brug af awk-kommandoen, og hvordan den kan bruges til at opdele en strengstreng. Vi har udført eksemplerne fra denne artikel på et Debian 10 Buster-system, men de kan let replikeres på de fleste Linux-distroer.

Den eksempelfil, vi vil bruge

Eksempelfilen for strenge, som vi vil bruge til at demonstrere brugen af ​​awk-kommandoen, er som følger:

Dette er hvad hver kolonne i prøvefilen angiver:

Eksempel 1: Brug Awk til at udskrive alle linjer i en fil

Udskrivning af hver linje i en specificeret fil er standardadfærden for awk-kommandoen. I den følgende syntaks af awk-kommandoen specificerer vi ikke noget mønster, som awk skal udskrive, og kommandoen skal således anvende "print" -handlingen på alle linjer i filen.

Syntaks:

$ awk 'print' filnavn.txt

Eksempel:

I dette eksempel fortæller jeg awk-kommandoen at udskrive indholdet af min prøvefil, linje for linje.

$ awk 'print' prøvefil.txt

Eksempel 2: Brug awk til kun at udskrive de linjer, der matcher et givet mønster

Med awk kan du angive et mønster, og kommandoen udskriver kun de linjer, der matcher det mønster.

Syntaks:

$ awk '/ pattern_to_be_matched / print' filnavn.txt

Eksempel:

Fra prøvefilen, hvis jeg kun vil udskrive de (n) linje (r), der indeholder variablen 'B', kan jeg bruge følgende kommando:

$ awk '/ B / print' prøvefil.txt

For at gøre eksemplet mere meningsfuldt, lad mig kun udskrive oplysningerne om medarbejdere, der er 'professor'.

$ awk '/ professor / print' sample_file.txt

Kommandoen udskriver kun de linjer / poster, der indeholder strengen "professor", så vi har mere værdifuld information afledt af dataene.

Eksempel 3. Brug awk til at opdele filen, så kun specifikke felter / kolonner udskrives

I stedet for at udskrive hele filen kan du gøre det vanskeligt kun at udskrive specifikke kolonner i filen. Awk behandler alle ord, adskilt af hvidt mellemrum, i en linje som en kolonneoptegnelse som standard. Den gemmer posten i en $ N-variabel. Hvor $ 1 repræsenterer det første ord, gemmer $ 2 det andet ord, $ 3 det fjerde osv. $ 0 gemmer hele linjen, så hvem linjen udskrives, som forklaret i eksempel 1.

Syntaks:

$ awk 'udskriv $ N, .. .' filnavn.txt

Eksempel:

Den følgende kommando udskriver kun den første kolonne (navn) og den anden kolonne (emne) i min prøvefil:

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

Eksempel 4: Brug Awk til at tælle og udskrive antallet af linjer, hvor et mønster matches

Du kan fortælle awk at tælle antallet af linjer, hvor et bestemt mønster matches, og derefter output det 'count'.

Syntaks:

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

Eksempel:

I dette eksempel vil jeg tælle antallet af personer, der underviser i emnet "engelsk". Derfor vil jeg fortælle awk-kommandoen at matche mønsteret "engelsk" og udskrive antallet af linjer, hvor dette mønster matches.

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

Tællingen her antyder, at 2 personer underviser i engelsk fra eksempelfiloptegnelserne.

Eksempel 5: Brug awk til kun at udskrive linjer med mere end et specifikt antal tegn

Til denne opgave bruger vi den indbyggede awk-funktion kaldet "længde". Denne funktion returnerer længden af ​​inputstrengen. Således, hvis vi kun ønsker at udskrive linjer med mere end eller endog mindre end antallet af tegn, kan vi bruge længdefunktionen på følgende måde:

For udskrivning af linjer med tegn, der er større end et tal:

$ awk 'længde ($ 0)> n' filnavn.txt

For udskrivning af linjer med tegn mindre end et tal:

$ awk længde ($ 0) < n' filename.txt

Hvor n er antallet af tegn, du vil angive for en linje.

Eksempel:

Den følgende kommando udskriver kun linjerne fra min prøvefil, der har tegn på mere end 30:

$ awk 'længde ($ 0)> 30' prøvefil.txt

Eksempel 6: Brug awk til at gemme kommandooutputtet i en anden fil

Ved at bruge omdirigeringsoperatøren '>' kan du bruge kommandoen awk til at udskrive dens output til en anden fil. Det er sådan, du kan bruge det:

$ awk 'criteria_to_print "filnavn.txt> outputfil.txt

Eksempel:

I dette eksempel bruger jeg omdirigeringsoperatoren med min awk-kommando til kun at udskrive medarbejdernes navne (kolonne 1) til en ny fil:

$ awk 'print $ 1' sample_file.txt> medarbejdernavne.txt

Jeg bekræftede gennem katkommandoer, at den nye fil kun indeholder navnene på de ansatte.

Eksempel 7: Brug awk til kun at udskrive ikke-tomme linjer fra en fil

Awk har nogle indbyggede kommandoer, som du kan bruge til at filtrere output. For eksempel bruges NF-kommandoen til at holde en optælling af felterne inden for den aktuelle inputpost. Her bruger vi NF-kommandoen til kun at udskrive de ikke-tomme linjer i filen:

$ awk 'NF> 0' sample_file.txt

Det er klart, at du kan bruge følgende kommando til at udskrive de tomme linjer:

$ awk 'NF < 0' sample_file.txt

Eksempel 8: Brug awk til at tælle de samlede linjer i en fil

En anden indbygget funktion kaldet NR registrerer antallet af inputregistreringer (normalt linjer) for en given fil. Du kan bruge denne funktion i awk som følger til at tælle antallet af linjer i en fil:

$ awk 'END print NR' sample_file.txt

Dette var de grundlæggende oplysninger, du har brug for for at starte med at opdele filer med kommandoen awk. Du kan bruge kombinationen af ​​disse eksempler til at hente mere meningsfuld information fra din strengstreng gennem awk.

Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...
Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...
Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...