Sök…


Introduktion

En awk består av mönster och handlingar, inneslutna i lockiga parenteser, som ska vidtas om ett mönster matchar. Det mest grundläggande mönstret är det tomma mönstret, som matchar alla poster. Den mest grundläggande åtgärden är den tomma handlingen, vilket motsvarar { print } , vilket i sin tur motsvarar { print $0 } . Om både mönstret och handlingen är tomma kommer awk helt enkelt inte att göra någonting.

Följande program eko helt enkelt sin inmatning, till exempel:

awk '{ print }' /etc/passwd

Eftersom { print } är standardåtgärden, och eftersom ett verkligt värde matchar alla poster, kan det programmet skrivas om som:

awk '1' /etc/passwd

Den vanligaste typen av mönster är förmodligen ett regelbundet uttryck inneslutet i snedstreck. Följande program kommer att skriva ut alla poster som innehåller minst två efterföljande händelser av bokstaven o , till exempel:

awk '/oo+/ { print }' /etc/passwd

Du kan dock använda godtyckliga uttryck som mönster. Följande program skriver ut namnen (fält ett) för användare i grupp noll (fält fyra), till exempel:

awk -F: '$4 == 0 { print $1 }' /etc/passwd

I stället för att matcha exakt kan du också matcha mot ett vanligt uttryck. Följande program skriver ut namnen på alla användare i en grupp med minst en noll i grupp-id:

awk -F: '$4 ~ /0/ { print $1 }' /etc/passwd

Filtrera linjer efter längd

Detta mönster låter dig filtrera linjer beroende på dess längd

$cat file
AAAAA
BBBB
CCCC
DDDD
EEEE

$awk 'length($0) > 4 { print $0 }' file
AAAAA
$

Hur som helst kommer mönstret att tillåta att nästa kodblock körs, då, som standardåtgärd för AWK är att skriva ut den aktuella raden {print} , ser vi samma resultat när vi kör detta:

$awk 'length($0) > 4 ' file
AAAAA


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow