AWK

Wstęp

Nie zamierzam przedstawiać tu pełnego opisu języka awk. Autorami jego są Alfreda V. Aho1, Petera Weinberger i Brian Kernighan2. Jest to bardzo sympatyczny język pomocny podczas przetwarzania danych o ustalonej strukturze. Nie wymaga kompilacji programów, składnia w bardzo wielu miejscach jest identyczna ze składnią języka C. Występuje kilka „smaków” tego języka: awk, mawk i gawk.

Zasada przetwarzania

Zasada działania języka jest bardzo prosta: każda linia kodu składa się z dwu części:

  • „wyzwalacza”,
  • „akcji”.

Wejściowy plik lub strumień danych (który składa się z szeregu rekordów podzielonych na pola) czytany jest rekord po rekordzie. Każdy rekord porównywany jest z „wyzwalaczem”. Jeżeli występuje zgodność (na przykład gdziekolwiek w rekordzie jest ciąg znaków zgodny z wyrażeniem regularnym zapisanym w wyzwalaczu) — uruchamiane są polecenia opisane w „akcji”. W szczególności może nie być wyzwalacza. Wówczas polecenia akcji wykonywane są dla każdego rekordu. Specjalne polecenie next pozwala przerwać przetwarzanie i przejść do analizy następnego rekordu.

W szczególności program

wydrukuje wszystkie rekordy w których wystąpi gdziekolwiek litera „A”.

Rekordy i pola

Każda linia tekstu jest rekordem. Można odwoływać się do jej zawartości przez symbol $0.

Zakłada się, że każdy rekord składa się z kilku pól oddzielonych jakimś znakiem. Standardowo znakiem tym jest odstęp (ale można go zmienić). Zatem rekord:

składa się z trzech pól. Do pierwszego z nich odwołujemy się przez symbol $1, drugiego $2 i tak dalej.

Przykładowe dane

W naszym przypadku przykładowe dane wyglądają tak:

(w miejscu kropeczek jest więcej wartości). Oprócz danych uśrednionych są również wartości minimalne (MIN) i maksymalne (MAX).

Liczba (300, 1800. 86400,…) mówi o okresie uśredniania (w sekundach). Do analizy należy brać tylko jeden z bloków danych. zaprezentowany program w awk „tnie dane” w tych miejscach gdzie pojawi się linia zaczynająca się od trzech minusów, a resztę napisu traktuje jako nazwę pliku do którego dane zostaną zapisane.

Plik do pobrania. Klikamy prawym klawiszem myszy i zapisz jako cut.awk.

Użycie

W terminalu wydajemy polecenie:

w kartotece powstaną pliki o nazwach: AVERAGE300, itd.


  1. Tak, ten od książki Algorytmy i struktury danych.
  2. Tak, ten od C.