Hur man använder kommandot awk på Linux

På Linux är awk en kommandoradstextmanipulationsdynamo, såväl som ett kraftfullt skriptspråk. Här är en introduktion till några av dess coolaste funktioner.

Hur awk fick sitt namn

Kommandot awk namngavs med hjälp av initialerna för de tre personer som skrev den ursprungliga versionen 1977: Alfred Aho, Peter Weinbergeroch Brian Kernighan. Dessa tre män var från den legendariska AT&T Bell Laboratories Unix pantheon. Med bidrag från många andra sedan dess har awk fortsatt att utvecklas.

Det är ett fullständigt skriptspråk, såväl som en komplett verktygslåda för textmanipulering för kommandoraden. Om den här artikeln gör dig sugen kan du göra det kolla in varje detalj om awk och dess funktionalitet.

Regler, mönster och åtgärder

awk fungerar på program som innehåller regler som består av mönster och åtgärder. Åtgärden utförs på texten som matchar mönstret. Mönster omges av lockiga hängslen ({}). Tillsammans bildar ett mönster och en handling en regel. Hela awk-programmet omges av enkla citattecken (’).

Låt oss ta en titt på den enklaste typen av awk-program. Den har inget mönster, så den matchar varje textrad som matas in i den. Detta innebär att åtgärden exekveras på varje rad. Väl använd den på utgången från den som befaller.

Här är standardutdata från vem:

who

De

Vi kanske inte behöver all den informationen, utan vi vill bara se namnen på kontona. Vi kan skicka utdata från vem till awk och sedan säga till awk att endast skriva ut det första fältet.

Som standard betraktar awk ett fält som en teckensträng omgiven av blanksteg, början på en rad eller slutet av en rad. Fält identifieras med ett dollartecken ($) och ett nummer. Så, $1 representerar det första fältet, som vi kommer att använda med utskriftsåtgärden för att skriva ut det första fältet.

Vi skriver följande:

who | awk '{print $1}'

awk skriver ut det första fältet och kasserar resten av raden.

Vi kan skriva ut hur många fält vi vill. Om vi ​​lägger till ett kommatecken som avgränsare, skriver awk ut ett mellanslag mellan varje fält.

Vi skriver följande för att även skriva ut tiden då personen loggade in (fält fyra):

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

Det finns ett par speciella fältidentifierare. Dessa representerar hela textraden och det sista fältet i textraden:

$0: Representerar hela textraden.
$1: Representerar det första fältet.
$2: Representerar det andra fältet.
$7: Representerar det sjunde fältet.
$45: Representerar det 45:e fältet.
$NF: Står för ”antal fält” och representerar det sista fältet.

Vi skriver följande för att få fram en liten textfil som innehåller ett kort citat som tillskrivs Dennis Ritchie:

cat dennis_ritchie.txt

De

Vi vill att awk ska skriva ut det första, andra och sista fältet i offerten. Observera att även om det är inlindat i terminalfönstret, är det bara en enda rad med text.

Vi skriver följande kommando:

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

Vi känner inte till den ”enkelheten”. är det 18:e fältet i textraden, och vi bryr oss inte. Vad vi vet är att det är det sista fältet, och vi kan använda $NF för att få dess värde. Perioden anses bara vara en annan karaktär i