Awk

Jak korzystać z AWK w systemie Linux

Jak korzystać z AWK w systemie Linux

Narzędzia oferowane przez Linuksa często są zgodne z filozofią projektowania UNIX. Każde narzędzie powinno być małe, używać zwykłego tekstu do 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 Linuksie narzędzie awk jest preinstalowane we wszystkich dystrybucjach Linuksa. Sam AWK jest językiem programowania. Narzędzie AWK jest tylko interpreterem języka programowania AWK. W tym przewodniku sprawdź, jak korzystać z AWK w systemie Linux.

Użycie AWK

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

Domyślnym zachowaniem awk jest używanie spacji (spacji, tabulacji itp.).) do oddzielania pól. Na szczęście wiele plików konfiguracyjnych w systemie Linux jest zgodnych z tym wzorcem.

Podstawowa składnia

Tak wygląda struktura poleceń awk.

$ awk '// ; ; '

Fragmenty polecenia są dość oczywiste. Awk może działać bez części wyszukiwania lub akcji. Jeśli nic nie jest określone, domyślną akcją na meczu będzie po prostu drukowanie. Zasadniczo awk wypisze wszystkie dopasowania znalezione w pliku.

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

Jeśli podane są obie części, to awk użyje wzorca do określenia, czy bieżący wiersz go odzwierciedla. Jeśli pasuje, to awk wykonuje określone działanie.

Zauważ, że awk może również działać na przekierowanych tekstach. Można to osiągnąć, przesyłając zawartość polecenia do działania w awk. Dowiedz się więcej o poleceniu potoku Linux.

W celach demonstracyjnych oto przykładowy plik tekstowy. Zawiera 10 linii, 2 słowa w linii.

$ próbka kota.tekst

Wyrażenie regularne

Jedną z kluczowych cech, które sprawiają, że awk jest potężnym narzędziem, jest obsługa wyrażeń regularnych (w skrócie regex). Wyrażenie regularne to ciąg znaków, który reprezentuje pewien wzorzec znaków.

Oto lista niektórych z najczęstszych składni wyrażeń regularnych. Te składnie wyrażeń regularnych są unikalne nie tylko w awk. Są to prawie uniwersalne składnie wyrażeń regularnych, więc opanowanie ich pomoże również w innych aplikacjach/programowaniu, które wymagają wyrażeń regularnych.

  • Podstawowe postacie: Wszystkie znaki alfanumeryczne podkreślone (_) itp.
    • Zestaw znaków: Aby było łatwiej, w wyrażeniu regularnym znajdują się grupy znaków. Na przykład wielkie litery (A-Z), małe litery (a-z) i cyfry (0-9).
  • Meta-znaki: Są to postacie, które wyjaśniają różne sposoby rozwijania zwykłych postaci.
    • Kropka (.): Dowolny znak w pozycji jest prawidłowy (z wyjątkiem nowej linii).
    • Gwiazdka (*): Zero lub więcej istnień znaku bezpośredniego poprzedzającego jest prawidłowe.
    • Nawias ([]): Dopasowanie jest ważne, jeśli na danej pozycji pasuje dowolny ze znaków z nawiasu. Można go łączyć z zestawami znaków.
    • Karetka (^): 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 metaznak ma być użyty w sensie dosłownym.

Drukowanie tekstu

Aby wydrukować całą zawartość pliku tekstowego, użyj polecenia drukowania. W przypadku wzorca wyszukiwania nie ma zdefiniowanego wzorca. A więc awk wypisuje wszystkie linie.

$ awk 'print' próbka.tekst

Tutaj „print” jest poleceniem AWK, które wypisuje zawartość danych wejściowych.

Wyszukiwanie ciągów

AWK może wykonać podstawowe wyszukiwanie tekstowe na podanym tekście. W sekcji wzoru musi to być tekst do znalezienia.

W poniższym poleceniu awk wyszuka tekst „szybko” we wszystkich wierszach przykładowego pliku.tekst.

$ awk '/szybki/' próbka.tekst

Teraz użyjmy kilku wyrażeń regularnych, aby dokładniej dostroić wyszukiwanie. Następujące polecenie wyświetli wszystkie linie, które na początku mają „brązowe”brow.

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

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

$ awk '/quick$/' próbka.tekst

Wzór dzikiej karty

Następny przykład pokaże użycie karetki (.). Tutaj mogą występować dowolne dwa znaki przed literą „e”.

$ awk „/… e/” próbka.tekst

Wzór dzikiej karty (za pomocą gwiazdki)

Co jeśli w lokalizacji może być dowolna liczba znaków?? Aby dopasować dowolny możliwy znak na pozycji, użyj gwiazdki (*). Tutaj AWK dopasuje wszystkie wiersze, które mają dowolną liczbę znaków po „the”.

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

Wyrażenie w nawiasie

Poniższy przykład pokaże, jak używać wyrażenia nawiasowego. Wyrażenie nawiasu mówi, że w lokalizacji dopasowanie będzie ważne, jeśli pasuje do zestawu znaków ujętych w nawiasy. Na przykład następujące polecenie dopasuje „The” i „Tee” jako prawidłowe dopasowania.

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

W wyrażeniu regularnym jest kilka predefiniowanych zestawów znaków character. Na przykład zestaw wszystkich wielkich liter jest oznaczony jako „A-Z”. W poniższym poleceniu awk dopasuje wszystkie słowa zawierające wielką literę.

$ awk '/[A-Z]/' próbka.tekst

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

  • [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 cyfrę.

Wstępnie zdefiniowane zmienne Awk

AWK zawiera kilka predefiniowanych i automatycznych zmiennych. Te zmienne mogą ułatwić pisanie programów i skryptów za pomocą AWK.

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

  • NAZWA PLIKU: Nazwa bieżącego pliku wejściowego.
  • RS: Separator rekordów. Ze względu na charakter AWK przetwarza dane po jednym rekordzie na raz. Tutaj ta zmienna określa ogranicznik używany do dzielenia strumienia danych na rekordy. Domyślnie ta wartość to znak nowej linii.
  • NR: Bieżący numer rekordu wejściowego. Jeśli wartość RS jest ustawiona na domyślną, wtedy ta wartość będzie wskazywać aktualny numer linii wejściowej.
  • FS/OFS: Znak(i) używany jako separator pól. Po przeczytaniu AWK dzieli rekord na różne pola. Ogranicznik jest określony przez wartość FS. Podczas drukowania AWK ponownie dołącza do wszystkich pól. Jednak obecnie AWK używa separatora OFS zamiast separatora FS. Ogólnie rzecz biorąc, zarówno FS, jak i OFS są takie same, ale nie muszą być takie same.
  • NF: Liczba pól w bieżącym rekordzie. Jeśli używana jest domyślna wartość „biała spacja”, to będzie ona odpowiadać liczbie słów w bieżącym rekordzie.
  • ORS: Separator rekordów dla danych wyjściowych. Domyślną wartością jest znak nowej linii.

Sprawdźmy je w akcji. Następujące polecenie użyje zmiennej NR do wydrukowania 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 praktycznie nic. To sztuczka wykorzystująca niejasną regułę POSIX. Określa, że ​​jeśli wartość RS jest pustym ciągiem, to rekordy są oddzielone sekwencją składającą się z nowego wiersza z jednym lub większą liczbą pustych wierszy. W POSIX pusta linia bez zawartości jest całkowicie pusta. Jeśli jednak wiersz zawiera spacje, nie jest uważany za „pusty”.

$ awk 'print' RS=" sample.tekst

Dodatkowe zasoby

AWK to potężne narzędzie z mnóstwem funkcji. Chociaż ten przewodnik obejmuje wiele z nich, to wciąż 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 powinieneś sprawdzić.

  • Przytnij białe znaki
  • Korzystanie z instrukcji warunkowej
  • Wydrukuj zakres kolumn
  • Wyrażenie regularne z AWK
  • 20 przykładów AWK

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

Końcowa myśl

Mamy nadzieję, że ten przewodnik pomógł w dobrym zrozumieniu podstaw AWK. Chociaż może to trochę potrwać, opanowanie AWK jest niezwykle satysfakcjonujące pod względem mocy, jaką daje.

Udanych komputerów!

How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...
Gry Darmowe i otwarte silniki gier do tworzenia gier na Linuksa
Darmowe i otwarte silniki gier do tworzenia gier na Linuksa
Ten artykuł zawiera listę darmowych i otwartych silników gier, których można używać do tworzenia gier 2D i 3D w systemie Linux. Istnieje wiele takich ...