Szukaj…


Wprowadzenie

awk składa się z wzorów i działań zamkniętych w nawiasy klamrowe, które należy wykonać, jeśli wzór pasuje. Najbardziej podstawowym wzorem jest pusty wzór, który pasuje do dowolnego rekordu. Najbardziej podstawową akcją jest akcja pusta, która jest równoważna { print } , co z kolei jest równoważne { print $0 } . Jeśli zarówno wzorzec, jak i akcja są puste, awk po prostu nic nie zrobi.

Poniższy program po prostu powtórzy swoje wejście, na przykład:

awk '{ print }' /etc/passwd

Ponieważ { print } jest domyślną akcją, a ponieważ prawdziwa wartość pasuje do dowolnego rekordu, program ten można zapisać ponownie:

awk '1' /etc/passwd

Najpopularniejszym typem wzorca jest prawdopodobnie wyrażenie regularne ujęte w ukośniki. Następujący program wydrukuje wszystkie rekordy, które zawierają co najmniej dwa kolejne wystąpienia litery o , na przykład:

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

Można jednak użyć dowolnych wyrażeń jako wzorców. Poniższy program wypisuje nazwy (pole pierwsze) użytkowników w grupie zero (pole czwarte), na przykład:

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

Zamiast dokładnie dopasowywać, możesz także dopasować do wyrażenia regularnego. Poniższy program wypisuje nazwy wszystkich użytkowników w grupie z co najmniej jednym zerem w identyfikatorze grupy:

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

Filtruj linie według długości

Ten wzór pozwala filtrować linie w zależności od ich długości

$cat file
AAAAA
BBBB
CCCC
DDDD
EEEE

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

W każdym razie wzorzec pozwoli na wykonanie następnego bloku kodu, a ponieważ domyślną akcją dla AWK jest wydrukowanie bieżącego wiersza {print} , zobaczymy ten sam wynik podczas wykonywania tego:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow