Jak używać AWK w Linux

Jak używać AWK w Linux

Oferta narzędzi Linux często podąża za filozofią projektowania UNIX. Każde narzędzie powinno być małe, używać zwykłego tekstu dla we/wy i działać w sposób modułowy. Dzięki spuściźnie mamy jedne z najlepszych funkcji przetwarzania tekstu za pomocą narzędzi takich jak SED i AWK.

W Linux narzędzie AWK jest wstępnie zainstalowane na wszystkich dystrybucjach Linux. Sam Awk to język programowania. Narzędzie AWK to tylko tłumacz języka programowania AWK. W tym przewodniku sprawdź, jak używać AWK w Linux.

Zastosowanie AWK

Narzędzie AWK jest najbardziej przydatne, gdy teksty są zorganizowane w przewidywalnym formacie. Jest całkiem dobry w analizowaniu i manipulowaniu danymi tabelarnymi. Działa na zasadzie linii po linii w całym pliku tekstowym.

Domyślnym zachowaniem AWK jest użycie białej listy (przestrzenie, zakładki itp.) do oddzielania pól. Na szczęście wiele plików konfiguracyjnych w systemie Linux śledzi ten wzór.

Podstawowa składnia

Tak wygląda struktura poleceń AWK.

$ awk '// ; ; '

Części polecenia są dość oczywiste. AWK może działać bez części wyszukiwania lub akcji. Jeśli nic nie zostanie określone, domyślną akcją w meczu będzie po prostu drukowanie. Zasadniczo AWK wydrukuje wszystkie mecze znalezione w pliku.

Jeśli nie ma określonego wzorca wyszukiwania, AWK wykona określone działania na każdym wierszu pliku.

Jeśli podane są obie części, AWK użyje wzoru, aby ustalić, czy bieżąca linia go odzwierciedla. Jeśli zostanie dopasowany, AWK wykonuje określoną akcję.

Zauważ, że AWK może również pracować nad przekierowanymi tekstami. Można to osiągnąć, kierując zawartość polecenia, aby działać. Dowiedz się więcej o poleceniu Rury Linux.

Do celów demonstracyjnych oto przykładowy plik tekstowy. Zawiera 10 wierszy, 2 słowa na wiersz.

próbka $ cat.tekst

Wyrażenie regularne

Jedną z kluczowych funkcji, które sprawiają, że AWK potężnym narzędziem jest obsługa wyrażenia regularnego (w skrócie Regex). Wyrażenie regularne to ciąg, który reprezentuje pewien wzór znaków.

Oto lista niektórych z najczęstszych składni wyrażenia regularnego. Te składni Regex nie są tylko unikalne dla AWK. Są to niemal uniwersalne składni regex, więc ich opanowanie pomoże również w innych aplikacjach/programowaniu, które obejmują wyrażenie regularne.

  • Podstawowe znaki: Wszystkie alfanumeryczne znaki podkreśla (_) itp.
    • Zestaw znaków: Aby ułatwić, w wyrażeniu wyrażenia są grupy postaci. Na przykład wielkimi (A-Z), małe litery (A-Z) i cyfry numeryczne (0-9).
  • Meta-właściciele: Są to postacie, które wyjaśniają różne sposoby rozszerzenia zwykłych znaków.
    • Okres (.): Każdy dopasowanie postaci w pozycji jest ważne (z wyjątkiem nowej linii).
    • Gwiazdka (*): Zero lub więcej egzystencji bezpośredniego znaku poprzedzającego to jest ważne.
    • Nawias ([]): Mecz jest ważny, jeśli na pozycji dowolna z postaci z nawiasu jest dopasowana. Można to połączyć z zestawami znaków.
    • CareT (^): Mecz będzie musiał być na początku linii.
    • Dolar ($): Mecz będzie musiał być na końcu linii.
    • Ukośnik wsteczny (\): Jeśli jakikolwiek meta-znak musi być używany w dosłownym sensie.

Drukowanie tekstu

Aby wydrukować całą zawartość pliku tekstowego, użyj polecenia drukuj. W przypadku wzorca wyszukiwania nie ma zdefiniowanego wzorca. AWK drukuje wszystkie linie.

$ awk 'print'.tekst

Tutaj „Drukuj” to polecenie AWK, które drukuje zawartość danych wejściowych.

Wyszukiwanie ciągów

AWK może przeprowadzić podstawowe wyszukiwanie tekstu w danym tekście. W sekcji wzoru musi to być tekst do znalezienia.

W poniższym poleceniu AWK będzie wyszukiwać tekst „szybki” we wszystkich wierszach próbki pliku.tekst.

$ AWK '/Quick/' próbka.tekst

Teraz użyjmy niektórych wyrażeń regularnych, aby jeszcze bardziej dostroić wyszukiwanie. Następujące polecenie wydrukuje wszystkie wiersze, które mają „brązowy” na początku.

$ awk '/^brąz/' próbka.tekst

Co powiesz na znalezienie czegoś na końcu linii? Następujące polecenie wydrukuje wszystkie wiersze, które mają „szybkie” na końcu.

$ AWK '/Quick $/' próbka.tekst

Wzór dzikiej karty

Kolejnym przykładem jest zaprezentowanie użycia opiekuna (.). Tutaj mogą być dwie postacie przed postać „E”.

$ awk '/… e/' próbka.tekst

Wzór dzikiej karty (za pomocą gwiazdki)

Co jeśli w miejscu może być dowolna liczba znaków? Aby dopasować do dowolnego możliwego znaku w pozycji, użyj gwiazdki (*). Tutaj AWK będzie pasować do wszystkich linii, które mają dowolną liczbę postaci po „The”.

$ awk '/the*/' próbka.tekst

Wyrażenie wspornika

Poniższy przykład zaprezentuje, jak korzystać z wyrażenia wspornika. Wyrażenie wspornika mówi, że w miejscu mecz będzie ważny, jeśli będzie pasował do zestawu znaków zamkniętych przez wsporniki. Na przykład następujące polecenie będzie pasować do „The” i „Tee” jako ważnych dopasowań.

$ awk '/t [he] e/' próbka.tekst

W wyrażeniu regularnym istnieją kilka predefiniowanych zestawów znaków. Na przykład zestaw wszystkich wielkich liter jest oznaczony jako „A-Z”. W poniższym poleceniu AWK pasuje do wszystkich słów zawierających wielką literę.

$ awk '/[a-z]/' próbka.tekst

Spójrz na następujące użycie zestawów znaków z wyrażeniem wspornika.

  • [0-9]: Wskazuje pojedynczą cyfrę
  • [A-Z]: Wskazuje pojedynczą małą literę
  • [A-Z]: Wskazuje pojedynczą wielką literę
  • [A-za-Z]: Wskazuje pojedynczą literę
  • [A-ZA-Z 0-9]: Wskazuje pojedynczy znak lub cyfra.

Przed zdefiniowane zmienne AWK

AWK jest wyposażony w szereg zmiennych wstępnie zdefiniowanych i automatycznych. Te zmienne mogą ułatwić pisanie programów i skryptów z AWK.

Oto niektóre z najczęstszych zmiennych AWK, na które się spotkasz.

  • NAZWA PLIKU: Nazwa pliku bieżącego pliku wejściowego.
  • Rs: Separator rekordów. Ze względu na charakter AWK przetwarza dane o jeden rekord na raz. Tutaj ta zmienna określa ograniczenie używane do podziału strumienia danych na rekordy. Domyślnie ta wartość jest nową postacią.
  • Nr: Bieżący numer rekordu wejściowego. Jeśli wartość RS jest ustawiona na domyślną, wówczas ta wartość wskazuje bieżący numer linii wejściowej.
  • FS/OFS: Znaki stosowane jako separator pola. Po przeczytaniu AWK dzieli rekord na różne pola. Ogranicznik jest zdefiniowany przez wartość FS. Podczas drukowania AWK dołącza do wszystkich pola. Jednak w tej chwili AWK używa separatora OFS zamiast separatora FS. Zasadniczo zarówno FS, jak i OFS są takie same, ale nie obowiązkowe.
  • Nf: Liczba pól w bieżącym rekordzie. Jeśli używana jest domyślna wartość „Whitespace”, będzie ona zgodna z liczbą słów w bieżącym rekordzie.
  • Ors: Separator rekordów danych wyjściowych. Wartością domyślną jest nowa postać.

Sprawdźmy je w akcji. Poniższe polecenie użyje zmiennej NR do drukowania wiersza 2 do wiersza 4 z próbki.tekst. AWK obsługuje również operatory logiczne, takie jak logiczne i (&&).

$ awk 'nr> 1 && nr < 5' sample.txt

Aby przypisać określoną wartość do zmiennej AWK, użyj następującej struktury.

$ awk '// ; ; ' =,

Na przykład, aby usunąć wszystkie puste wiersze z pliku wejściowego, zmień wartość RS na w zasadzie nic. To sztuczka, która używa niejasnej zasady POSIX. Określa, że ​​jeśli wartość RS jest pustym ciągiem, wówczas rekordy są oddzielone sekwencją, która składa się z nowej linii z jedną lub więcej pustymi wierszami. W POSIX pusta linia bez treści jest całkowicie pusta. Jeśli jednak linia zawiera białe listy, nie jest to uważane za „puste”.

$ awk 'print' rs = "próbka.tekst

Dodatkowe zasoby

AWK to potężne narzędzie z mnóstwem funkcji. Podczas gdy ten przewodnik obejmuje ich wiele, wciąż jest to tylko podstawy. Opanowanie AWK zajmie więcej niż tylko to. Ten przewodnik powinien być miłym wprowadzeniem do narzędzia.

Jeśli naprawdę chcesz opanować narzędzie, oto kilka dodatkowych zasobów, które należy sprawdzić.

  • Przytnij Whitespace
  • Korzystanie z instrukcji warunkowej
  • Wydrukuj szereg kolumn
  • Regex z AWK
  • 20 przykładów AWK

Internet to całkiem dobre miejsce, aby się czegoś nauczyć. Istnieje wiele niesamowitych samouczków na podstawach AWK dla bardzo zaawansowanych użytkowników.

Końcowa myśl

Mamy nadzieję, że ten przewodnik pomógł dobrze zrozumieć podstawy AWK. Chociaż może to potrwać trochę czasu, opanowanie AWK jest niezwykle satysfakcjonujące pod względem obdarowanej mocy.

Szczęśliwy komputer!