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.
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.
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.
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ć.
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!