Sådan bruger du awk-kommandoen på Linux

På Linux er awk en kommandolinjetekstmanipulationsdynamo, såvel som et kraftfuldt scriptsprog. Her er en introduktion til nogle af dens fedeste funktioner.

Hvordan awk fik sit navn

awk-kommandoen blev navngivet ved hjælp af initialerne på de tre personer, der skrev den originale version i 1977: Alfred Aho, Peter Weinberger, og Brian Kernighan. Disse tre mænd var fra den legendariske AT&T Bell Laboratories Unix pantheon. Med bidrag fra mange andre siden da er awk fortsat med at udvikle sig.

Det er et komplet scriptsprog, såvel som et komplet tekstmanipulationsværktøj til kommandolinjen. Hvis denne artikel vækker din appetit, kan du det tjek alle detaljer om awk og dens funktionalitet.

Regler, mønstre og handlinger

awk arbejder på programmer, der indeholder regler bestående af mønstre og handlinger. Handlingen udføres på den tekst, der matcher mønsteret. Mønstre er omgivet af krøllede seler ({}). Sammen danner et mønster og en handling en regel. Hele awk-programmet er omgivet af enkelte anførselstegn (‘).

  Sådan spiller du The Room på Linux

Lad os tage et kig på den enkleste type awk-program. Den har intet mønster, så den matcher hver linje med tekst, der føres ind i den. Det betyder, at handlingen udføres på hver linje. Godt bruge det på outputtet fra den der befaler.

Her er standardoutputtet fra hvem:

who

Det

Måske har vi ikke brug for al den information, men vi ønsker blot at se navnene på konti. Vi kan overføre output fra hvem til awk og derefter bede awk om kun at udskrive det første felt.

Som standard betragter awk et felt som en streng af tegn omgivet af mellemrum, begyndelsen af ​​en linje eller slutningen af ​​en linje. Felter identificeres med et dollartegn ($) og et tal. Så $1 repræsenterer det første felt, som vi vil bruge med udskrivningshandlingen til at udskrive det første felt.

  Sådan ændres tapetet automatisk på Linux

Vi skriver følgende:

who | awk '{print $1}'

awk udskriver det første felt og kasserer resten af ​​linjen.

Vi kan udskrive så mange felter, som vi vil. Hvis vi tilføjer et komma som separator, udskriver awk et mellemrum mellem hvert felt.

Vi skriver følgende for også at udskrive det tidspunkt, hvor personen er logget ind (felt fire):

who | awk '{print $1,$4}'

Der er et par specielle feltidentifikatorer. Disse repræsenterer hele tekstlinjen og det sidste felt i tekstlinjen:

$0: Repræsenterer hele tekstlinjen.
$1: Repræsenterer det første felt.
$2: Repræsenterer det andet felt.
$7: Repræsenterer det syvende felt.
$45: Repræsenterer det 45. felt.
$NF: Står for “antal felter” og repræsenterer det sidste felt.

  Sådan kører du Linux på en iPad

Vi skriver følgende for at få en lille tekstfil frem, der indeholder et kort citat, der tilskrives Dennis Ritchie:

cat dennis_ritchie.txt

Det

Vi vil have awk til at udskrive det første, andet og sidste felt i citatet. Bemærk, at selvom det er pakket rundt i terminalvinduet, er det kun en enkelt tekstlinje.

Vi skriver følgende kommando:

awk '{print $1,$2,$NF}' dennis_ritchie.txt

Vi kender ikke den “simpelhed”. er det 18. felt i tekstlinjen, og det er vi ligeglade med. Hvad vi ved er, at det er det sidste felt, og vi kan bruge $NF til at få dets værdi. Perioden betragtes blot som en anden karakter i