Jak opanować polecenie AWK do przetwarzania tekstów pod Linuksem?

Polecenie AWK to potężne i wszechstronne narzędzie do przetwarzania i przekształcania danych tekstowych w systemie Linux. Niezależnie od tego, czy wyodrębniasz informacje, filtrujesz wiersze, formatujesz dane wyjściowe, czy wykonujesz obliczenia, AWK może ułatwić Ci życie za pomocą zaledwie kilku linijek kodu. W tym artykule dowiesz się, jak używać polecenia AWK do manipulacji tekstem w systemie Linux.

Co to jest polecenie AWK?

Język programowania AWK.svg

Polecenie AWK jest interpretowanym językiem programowania uruchamianym na terminalu Linux. Jego nazwa pochodzi od inicjałów jego twórców: Alfreda Aho, Petera Weinbergera i Briana Kernighana. AWK został pierwotnie zaprojektowany do przetwarzania plików podzielonych na pola oddzielone ogranicznikami, takich jak pliki CSV lub pliki /etc/passwd. Ale AWK może również obsługiwać bardziej złożone pliki tekstowe, takie jak pliki HTML lub XML. AWK nie jest obiektowym językiem programowania , ale umożliwia definiowanie lokalnych lub globalnych funkcji i zmiennych. Posiada również struktury sterujące, takie jak pętle i warunki.

Ogólna składnia polecenia AWK jest następująca:

awk [opcje] „program” [pliki]

Program to seria instrukcji definiujących wzorce do wyszukiwania w każdej linii pliku ( plików oraz działania, które należy wykonać po znalezieniu wzorca. Opcje pozwalają na modyfikację zachowania polecenia AWK, np. wybór ogranicznika pola czy formatu wyjściowego .

Jak wydrukować tekst za pomocą polecenia AWK?

Jak korzystać z polecenia Awk w systemie Linux

Polecenie AWK może zostać użyte do wydrukowania komunikatu do terminala w oparciu o wzór w tekście. Jeżeli bez powodu uruchomisz polecenie AWK, a jedynie polecenie drukowania, AWK wyświetli komunikat za każdym razem, gdy naciśniesz Enter.

Na przykład, jeśli wpiszesz:

awk '{drukuj "Witam"}'

I naciskasz Enter kilka razy, otrzymujesz:

Dzień dobry, dzień dobry, dzień dobry

Aby zatrzymać polecenie AWK, możesz nacisnąć Ctrl+C.

Jeżeli chcesz wydrukować zawartość pliku za pomocą polecenia AWK, możesz skorzystać ze BEGIN , który uruchamia się przed odczytaniem pliku, oraz END , który uruchamia się po odczytaniu pliku. Na przykład, jeśli masz plik o nazwie test.txt , który zawiera:

To jest test. AWK to świetne narzędzie. Linux to najlepszy system operacyjny

Możesz wydrukować zawartość pliku za pomocą następującego polecenia:

awk 'BEGIN {print "Oto zawartość pliku test.txt:"} {print} END {print "Koniec pliku"}' test.txt

Które dają:

Oto zawartość pliku test.txt: To jest test AWK to świetne narzędzie Linux to najlepszy system operacyjny Koniec pliku

Polecenie {print} bez argumentów wypisuje całą linię. Możesz także wydrukować określone pole, używając $n , gdzie n jest numerem pola. Domyślnie pola oddzielane są spacjami lub tabulatorami, ale możesz zmienić separator za pomocą -F .

Na przykład, jeśli chcesz wydrukować pierwsze i trzecie pole pliku /etc/passwd , oddzielone dwukropkiem ( :) , możesz użyć następującego polecenia:

awk -F: '{print $1 " " 3 $}' /etc/passwd

Co daje coś takiego:

root 0 demon 1 bin 2 sys 3 synchronizacja 4 gry 5 człowiek 6 lp 7 poczta 8 aktualności 9 uucp 10 proxy 13 www-data 33 ...

Za pomocą polecenia AWK można także drukować wyrażenia arytmetyczne lub ciągi znaków. Na przykład, jeśli chcesz wydrukować kwadrat drugiego pola pliku test.txt , możesz użyć następującego polecenia:

awk '{print $2^2}' test.txt

Które dają:

jest 16 jest

Jeśli chcesz wydrukować liczbę linii w test.txt , możesz użyć specjalnej zmiennej NR , która zawiera numer bieżącej linii. Na przykład możesz użyć następującego polecenia:

awk 'END {print NR}' test.txt

Które dają:

3

Jak filtrować tekst za pomocą polecenia AWK?

dl.beatsnoop.com kciuk 1687289446

Polecenie AWK może służyć do filtrowania tekstu na podstawie wzorców lub warunków. Jeśli przed akcją określisz wzorzec, AWK wykona akcję tylko wtedy, gdy wzorzec zostanie znaleziony w wierszu. Wzorzec może być wyrażeniem regularnym, porównaniem, operacją logiczną lub ich kombinacją.

Na przykład, jeśli chcesz wydrukować linie z test.txt zawierające słowo Linux , możesz użyć następującego polecenia:

awk '/Linux/ {drukuj}' test.txt

Które dają:

Linux jest najlepszym systemem operacyjnym

Jeśli chcesz wydrukować linie z /etc/passwd , których UID jest większy niż 1000, możesz użyć następującego polecenia:

awk -F: '3 $ > 1000 {drukuj}' /etc/passwd

Co daje coś takiego:

systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:stos oprogramowania TPM,,,:/var/lib/tpm:/bin/false _rpc: x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139: Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

Możesz także użyć operatorów logicznych && (i), || (lub) i ! (nie) do łączenia wzorów. Na przykład, jeśli chcesz wydrukować linie z /etc/passwd , które mają UID większy niż 1000 i powłokę inną niż /usr/sbin/nologin , możesz użyć następującego polecenia:

awk -F: '3 $ > 1000 && 7 $ != "/usr/sbin/nologin" {print}' /etc/passwd

Kopiować

Co daje coś takiego:

tss:x:131:142:stos oprogramowania TPM,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x: 133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq :x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false...

Jak edytować tekst za pomocą polecenia AWK?

dl.beatsnoop.com kciuk 1687289615

Polecenie AWK umożliwia modyfikację tekstu za pomocą funkcji wbudowanych lub zmiennych specjalnych. Na przykład, jeśli chcesz zastąpić spacje łącznikami w test.txt , możesz użyć gsub , która zastępuje wszystkie wystąpienia jednego ciągu innym. Można także użyć specjalnej OFS , która definiuje separator pola wyjściowego. Na przykład możesz użyć następującego polecenia:

awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt

Które dają:

30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51

Możesz zapoznać się z instrukcją poleceń AWK, aby poznać inne dostępne funkcje i zmienne.

Jak używać pętli for z poleceniem AWK?

Komendy AWK można używać do wykonywania pętli for na polach lub liniach w pliku. Składnia pętli for jest następująca:

for (zmienna w tablicy) akcja

Gdzie zmienna to nazwa zmiennej, która sukcesywnie pobiera wartości z tablicy , a akcja to akcja, którą należy wykonać w każdej iteracji.

Na przykład, jeśli chcesz wydrukować pola pliku w odwrotnej kolejności, możesz użyć pętli for ze specjalną zmienną NF , która zawiera liczbę pól w bieżącej linii. Na przykład, jeśli masz test.txt , który zawiera:

To jest test. AWK to świetne narzędzie. Linux to najlepszy system operacyjny

Możesz odwrócić kolejność pól za pomocą następującego polecenia:

awk '{for (i=NF; i>0; i--) print $i}' test.txt

Które dają:

test jeden to To świetne narzędzie. Jednym z nich jest system operacyjny AWK, najlepszy jest Linux
dl.beatsnoop.com kciuk 1687289757

Możesz także użyć pętli for do iteracji po wierszach pliku ze specjalną FNR , która zawiera numer wiersza odnoszący się do bieżącego pliku. Na przykład, jeśli chcesz wydrukować parzyste numery linii pliku test.txt , możesz użyć następującego polecenia:

awk 'FNR%2==0 {wydrukuj FNR}' test.txt

Które dają:

2
4

Jak uruchomić skrypt AWK?

rozszerzeniem .awk i nadać mu uprawnienia do wykonywania za pomocą chmod +x . Następnie możesz uruchomić skrypt za pomocą polecenia ./nazwa_skryptu.awk [pliki] .

Na przykład, jeśli masz skrypt o nazwie hello.awk , który zawiera:

#!/usr/bin/awk -f ROZPOCZNIJ {wydrukuj „Witam”}

Skrypt możesz uruchomić za pomocą następującego polecenia:

./witaj.awk

Które dają:

Dzień dobry

Jak przekazać argumenty do skryptu AWK?

dl.beatsnoop.com kciuk 1687289922

Aby przekazać argumenty do skryptu AWK, możesz użyć dwóch metod:

  • Pierwsza metoda polega na użyciu -v w zmienna=wartość . Na przykład, jeśli chcesz przekazać dwa argumenty o nazwach var1 i var2 do hello.awk , możesz użyć następującego polecenia:
awk -v var1=witaj -v var2=świat -f witaj.awk 

W hello.awk możesz uzyskać dostęp do argumentów za pomocą zmiennych $var1 i $var2 . Na przykład, jeśli Twój skrypt zawiera:

#!/usr/bin/awk -f ROZPOCZNIJ {drukuj $zmienna1 "" $zmienna2}

Otrzymujesz:

Bonjour Monde
  • Druga metoda polega na wykorzystaniu specjalnej ARGV , która zawiera argumenty przekazane do skryptu. Na przykład, jeśli chcesz przekazać dwa nienazwane argumenty do hello.awk , możesz użyć następującego polecenia:
awk -f hello.awk witaj świecie 

W hello.awk indeksami ARGV[1] i ARGV[2] . Na przykład, jeśli Twój skrypt zawiera:

#!/usr/bin/awk -f ROZPOCZNIJ {drukuj ARGV[1] "" ARGV[2]}

Otrzymujesz:

Bonjour Monde

Często zadawane pytania

Jaka jest różnica między AWK i GAWK?

GAWK jest implementacją GNU AWK, która dodaje dodatkowe funkcje do oryginalnego języka, takie jak obsługa rozszerzonych wyrażeń regularnych, tablic wielowymiarowych lub predefiniowanych funkcji.

Jak debugować skrypt AWK?

Aby debugować skrypt AWK, możesz użyć -W parametrem lint , który wyświetla komunikaty ostrzegawcze o potencjalnych błędach w skrypcie. Można także użyć -W z dump-variables , który wyświetla wartości zmiennych na koniec wykonywania skryptu.

Jak używać polecenia AWK do sortowania danych?

Aby użyć polecenia AWK do sortowania danych, możesz użyć sort w połączeniu z AWK. Na przykład, jeśli chcesz posortować użytkowników w /etc/passwd według ich UID, możesz użyć następującego polecenia:

awk -F: '{print $1, $3}' /etc/passwd | sortuj -n -k2 

Łącząc AWK z innymi poleceniami (tutaj sort ), możesz z łatwością pójść znacznie dalej w wyświetlaniu i organizowaniu danych.

Jak wydrukować liczbę słów w pliku za pomocą polecenia AWK?

Aby wydrukować liczbę słów w pliku za pomocą polecenia AWK, można użyć specjalnej zmiennej NF , która zawiera liczbę pól w bieżącej linii oraz specjalnej zmiennej NR , która zawiera numer aktualnej linii. Używając pętli for, możesz policzyć słowa w każdym wierszu i dodać je do całkowitej . Korzystając ze specjalnego wzoru END możesz wydrukować efekt końcowy. Na przykład, jeśli masz plik o nazwie test.txt , który zawiera:

To jest test. AWK to świetne narzędzie. Linux to najlepszy system operacyjny

Możesz wydrukować liczbę słów w pliku za pomocą następującego polecenia:

awk '{for (i=1; i<=NF; i++) suma++} END {wydrukuj sumę}' test.txt

Które dają:

9

Jak użyć polecenia AWK do wyodrębnienia danych z pliku CSV?

Aby użyć polecenia AWK do wyodrębnienia danych z pliku wartości rozdzielanych przecinkami (CSV), możesz użyć -F , aby ustawić separator pól na przecinek. Na przykład, jeśli masz plik o nazwie test.csv , który zawiera:

imię, imię, wiek Alice, Dupont, 25 Bob, Martin, 32 Charles, Durand, 28

Możesz wyodrębnić imię i wiek osób za pomocą następującego polecenia:

awk -F"," '{print $1 " " $3}' test.csv

Które dają:

imię wiek Alicja 25 Bob 32 Karol 28

Jak filtrować dane za pomocą polecenia AWK?

Polecenie AWK umożliwia filtrowanie danych w oparciu o wzorce, którymi są wyrażenia regularne lub warunki logiczne. Wzory umieszczane są przed akcjami, oddzielone nawiasami klamrowymi. Na przykład, jeśli chcesz wyświetlić w test.csv zawierające nazwę Alicja , możesz skorzystać z następującego wzorca:

awk -F"," '/Alice/ {print}' test.csv

Które dają:

Alicja, Dupont, 25

Jeśli chcesz wyświetlić w test.csv starsze niż 30 lat, możesz zastosować następujący wzór:

awk -F"," '$3 > 30 {print}' test.csv

Które dają:

Bob, Martin, 32

Możesz łączyć wiele wzorców za pomocą operatorów logicznych && (i), || (lub) i ! (NIE). Na przykład, jeśli chcesz wyświetlić w test.csv , których nazwa zaczyna się na literę C lub ma mniej niż 10 lat, możesz użyć następującego wzorca:

awk -F"," '($1 ~ /^C/) || (3 $ < 10) {drukuj}' test.csv 

Które dają:

CAMILLE,M,7 CLARA,F,11 KLEMENT,M,7

Jak obliczyć statystyki za pomocą polecenia AWK?

Polecenie AWK umożliwia obliczenie statystyk danych liczbowych w pliku, takich jak suma, średnia, minimum lub maksimum. Aby to zrobić, po prostu użyj zmiennych do przechowywania wartości pośrednich i zaktualizuj je w każdej linii. Korzystając ze specjalnego END , możemy wyświetlić wynik końcowy. Przykładowo, jeśli chcesz obliczyć sumę i średnią wieku w test.csv , możesz skorzystać z następującego programu:

awk -F"," 'NR>1 {suma+=3$; liczba++} END {drukuj "Suma: " suma; print 'Średnia: 'suma/liczba}' test.csv 

Które dają:

Suma: 110 Średnia: 18,3333

Wyjaśnienia:

  • Używamy -F"," aby zdefiniować separator pól jako przecinek.
  • Używamy warunku NR>1, aby zignorować pierwszą linię pliku, która zawiera nazwy kolumn.
  • sumy i liczby wieków używamy Używamy += do zwiększania zmiennych o wartość trzeciego pola ( $3 ).
  • Aby wyświetlić wynik końcowy, używamy END Używamy / do obliczenia średniej poprzez podzielenie sumy przez liczbę.

Podobnie, jeśli chcesz obliczyć minimalny i maksymalny wiek pliku test.csv , możesz skorzystać z następującego programu:

awk -F"," 'NR>1 {if (min=="") min=max=3$; jeśli (3 dolary max) max=3$} END {wydrukuj "Min: " min; print 'Max: 'max}' test.csv 

Które dają:

Min.: 6 Maks.: 32

Wyjaśnienia:

  • Używamy -F"," aby zdefiniować separator pól jako przecinek.
  • Używamy warunku NR>1, aby zignorować pierwszą linię pliku, która zawiera nazwy kolumn.
  • Używamy min i max do przechowywania minimalnego i maksymalnego wieku. Inicjujemy te zmienne wartością trzeciego pola ( $3 ), jeśli są puste ( "" ). < i > używamy do porównywania wartości i w razie potrzeby aktualizacji zmiennych.
  • Aby wyświetlić wynik końcowy, używamy END

Wniosek

Polecenie AWK jest niezbędnym narzędziem do manipulowania tekstami pod Linuksem. Umożliwia wykonanie skomplikowanych zadań w kilku linijkach kodu, takich jak wyodrębnianie, filtrowanie, modyfikowanie czy obliczanie danych. Oferuje dużą elastyczność dzięki swoim wzorcom, działaniom, funkcjom i zmiennym. Można go łączyć z innymi poleceniami systemu Linux, aby rozszerzyć jego możliwości. Na przykład możesz użyć polecenia Echo w Windows , aby wyświetlić komunikat lub zmienną na ekranie. Jeśli chcesz dowiedzieć się więcej na temat polecenia AWK, możesz zapoznać się z instrukcją lub wieloma tutorialami dostępnymi w Internecie.

Poprzedni artykuł Jak zabezpieczyć transfer plików za pomocą FTPS na Windows Server?
Następny artykuł Jak zdobyć darmowy YouTube Premium?
Witam mnie, tu François :) W wolnym czasie redaktor, który uwielbia dzielić się swoją pasją: TT High tech! 😍 Niezależnie od tego, czy chodzi o sprzęt, oprogramowanie, gry wideo, media społecznościowe i wiele innych obszarów witryny. Dzielę się z Wami moimi analizami, testami, tutorialami i ulubionymi w różnych mediach. Jestem wykształconym i wymagającym technofilem, który nie tylko podąża za modą, ale stara się poprowadzić Cię w kierunku najlepszych rozwiązań. Bądźcie na bieżąco!