Jak używać polecenia awk w systemie Linux

W Linuksie awk to dynamo do manipulacji tekstem w wierszu poleceń, a także potężny język skryptowy. Oto wprowadzenie do niektórych z jego najfajniejszych funkcji.

Jak awk ma swoją nazwę

Polecenie awk zostało nazwane przy użyciu inicjałów trzech osób, które napisały oryginalną wersję w 1977 roku: Alfred Aho, Peter Weinberger, i Brian Kernighan. Ci trzej mężczyźni byli z legendarnego AT&T Bell Laboratories Panteon Unix. Od tamtej pory awk nadal ewoluował, przy udziale wielu innych osób.

Jest to pełny język skryptowy, a także kompletny zestaw narzędzi do manipulacji tekstem dla wiersza poleceń. Jeśli ten artykuł zaostrzy Twój apetyt, możesz sprawdź każdy szczegół o awk i jego funkcjonalności.

Reguły, wzorce i działania

awk działa na programach, które zawierają reguły złożone z wzorców i akcji. Akcja jest wykonywana na tekście pasującym do wzorca. Wzory są zawarte w nawiasach klamrowych ({}). Wzorzec i akcja tworzą razem regułę. Cały program awk ujęty jest w pojedyncze cudzysłowy (’).

Przyjrzyjmy się najprostszemu typowi programu awk. Nie ma wzorca, więc pasuje do każdego wprowadzonego do niego wiersza tekstu. Oznacza to, że akcja jest wykonywana w każdej linii. Dobrze użyj go na wyjściu z kto dowodzi.

Oto standardowe wyjście od kogo:

who

Plik

Być może nie potrzebujemy wszystkich tych informacji, ale po prostu chcemy zobaczyć nazwiska na kontach. Możemy potokować wyjście z who do awk, a następnie powiedzieć awk, aby wypisał tylko pierwsze pole.

Domyślnie awk uważa pole za ciąg znaków otoczony białymi znakami, początkiem wiersza lub końcem wiersza. Pola są identyfikowane za pomocą znaku dolara ($) i liczby. Tak więc $ 1 reprezentuje pierwsze pole, którego użyjemy z akcją print do wydrukowania pierwszego pola.

Wpisujemy:

who | awk '{print $1}'

Plik

awk wypisuje pierwsze pole, a resztę wiersza odrzuca.

Możemy wydrukować dowolną liczbę pól. Jeśli dodamy przecinek jako separator, awk wypisuje spację między każdym polem.

Wpisujemy również, aby wydrukować również godzinę zalogowania osoby (pole czwarte):

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

Plik

Istnieje kilka specjalnych identyfikatorów pól. Przedstawiają one cały wiersz tekstu i ostatnie pole w wierszu tekstu:

$ 0: reprezentuje cały wiersz tekstu.
$ 1: reprezentuje pierwsze pole.
$ 2: reprezentuje drugie pole.
7 $: reprezentuje siódme pole.
45 $: reprezentuje 45-te pole.
$ NF: oznacza „liczbę pól” i reprezentuje ostatnie pole.

Napiszemy co następuje, aby wyświetlić mały plik tekstowy, który zawiera przypisany krótki cytat Dennis Ritchie:

cat dennis_ritchie.txt

Plik

Chcemy, aby awk wypisał pierwsze, drugie i ostatnie pole cytatu. Zwróć uwagę, że chociaż jest zawinięty w oknie terminala, to tylko jedna linia tekstu.

Wpisujemy następujące polecenie:

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

Plik

Nie znamy tej „prostoty”. to 18. pole w wierszu tekstu, a nas to nie obchodzi. Wiemy, że jest to ostatnie pole i możemy użyć $ NF, aby uzyskać jego wartość. Kropka jest po prostu uważana za kolejny znak w