Jak opanować polecenie AWK do przetwarzania tekstów w systemie Linux?

Polecenie AWK to potężne i wszechstronne narzędzie do przetwarzania i transformacji danych tekstowych w systemie Linux. Niezależnie od tego, czy chcesz wyodrębnić informacje, filtrować wiersze, formatować dane wyjściowe, czy wykonywać obliczenia, AWK może uprościć Twoją pracę za pomocą zaledwie kilku linijek kodu. W tym artykule dowiesz się, jak używać polecenia AWK do manipulacji tekstem w systemie Linux.

Czym jest polecenie AWK?

Język programowania AWK.svg

Polecenie AWK to interpretowany język programowania, który działa w terminalu systemu Linux. Jego nazwa pochodzi od inicjałów jego twórców: Alfreda Aho, Petera Weinbergera i Briana Kernighana. AWK został pierwotnie zaprojektowany do obsługi plików o strukturze pól rozdzielonych ogranicznikami, takich jak pliki CSV czy /etc/passwd. AWK może jednak również przetwarzać bardziej złożone pliki tekstowe, takie jak pliki HTML czy XML. AWK nie jest obiektowym językiem programowania , ale pozwala na definiowanie lokalnych i globalnych funkcji oraz zmiennych. Posiada również struktury sterujące, takie jak pętle i instrukcje warunkowe.

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

awk [opcje] 'program' [pliki]

Program to sekwencja instrukcji, które definiują wzorce do wyszukania w każdym wierszu pliku ( plików oraz działania do wykonania po znalezieniu wzorca. Opcje pozwalają modyfikować działanie polecenia AWK, na przykład wybór separatora pola lub formatu wyjściowego.

Jak wydrukować tekst za pomocą polecenia AWK?

Jak używać polecenia Awk w systemie Linux

Polecenie AWK może służyć do drukowania komunikatu w terminalu na podstawie wzorca w tekście. Jeśli uruchomisz polecenie AWK bez wzorca, a jedynie polecenie drukowania, AWK będzie drukował komunikat za każdym razem, gdy naciśniesz Enter.

Na przykład, jeśli wpiszesz:

awk '{print "Witaj"}'

A jeśli naciśniesz Enter kilka razy, otrzymasz:

Cześć Cześć Cześć

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

Jeśli chcesz wydrukować zawartość pliku za pomocą polecenia AWK, możesz użyć specjalnego wzorca `BEGIN` , który jest wykonywany przed odczytaniem pliku, oraz specjalnego wzorca `END` , który jest wykonywany po odczytaniu pliku. Na przykład, jeśli masz plik o nazwie `test.txt` zawierający:

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

Zawartość pliku można wydrukować za pomocą następującego polecenia:

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

Co daje:

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 drukuje cały wiersz. Można również wydrukować konkretne pole za pomocą zmiennej $n , gdzie n to numer pola. Domyślnie pola są rozdzielone spacjami lub tabulatorami, ale można zmienić separator za pomocą -F .

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

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

Co daje coś takiego:

root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 news 9 uucp 10 proxy 13 www-data 33 ...

Możesz również drukować wyrażenia arytmetyczne lub ciągi znaków za pomocą polecenia AWK. Na przykład, aby wydrukować kwadrat drugiego pola w pliku test.txt , możesz użyć następującego polecenia:

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

Co daje:

ma 16 lat

Aby wyświetlić liczbę wierszy w pliku test.txt , możesz użyć specjalnej zmiennej NR , która zawiera numer bieżącego wiersza. Na przykład, możesz użyć następującego polecenia:

awk 'END {print NR}' test.txt

Co daje:

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 określisz wzorzec przed akcją, AWK wykona ją tylko wtedy, gdy wzorzec zostanie znaleziony w wierszu. Wzorzec może być wyrażeniem regularnym, porównaniem, operacją logiczną lub kombinacją tych elementów.

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

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

Co daje:

Linux jest najlepszym systemem operacyjnym

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

awk -F: '$3 > 1000 {print}' /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żna również używać operatorów logicznych && (i), || (lub) i ! (nie). Na przykład, aby wyświetlić wiersze w /etc/passwd z UID większym niż 1000 i powłoką inną niż /usr/sbin/nologin , można użyć następującego polecenia:

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

Kopia

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 może służyć do modyfikacji tekstu za pomocą funkcji wbudowanych lub zmiennych specjalnych. Na przykład, aby zastąpić spacje myślnikami w pliku test.txt , można użyć gsub , która zastępuje wszystkie wystąpienia jednego ciągu znaków innym. Można również użyć OFS , która definiuje separator pól wyjściowych. Na przykład, można użyć następującego polecenia:

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

Co daje:

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

Aby dowiedzieć się więcej o innych dostępnych funkcjach i zmiennych, zapoznaj się z podręcznikiem poleceń AWK.

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

Polecenie AWK może być używane do wykonywania pętli for na polach lub wierszach pliku. Składnia pętli for jest następująca:

dla (zmiennej w tablicy) akcja

Gdzie zmienna jest nazwą zmiennej, która kolejno pobiera wartości z tablicy , a akcja jest akcją, która ma być wykonywana przy 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żącym wierszu. 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 odwrócić kolejność pól za pomocą następującego polecenia:

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

Co daje:

Jednym z testów jest to potężne narzędzie; innym - AWK; najlepszym systemem operacyjnym jest Linux
dl.beatsnoop.com kciuk 1687289757

Możesz również użyć pętli for do iteracji po wierszach pliku ze specjalną zmienną FNR , która zawiera numer wiersza bieżącego pliku. Na przykład, aby wydrukować parzyste wiersze pliku test.txt , możesz użyć następującego polecenia:

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

Co daje:

2
4

Jak uruchomić skrypt AWK?

Aby uruchomić skrypt AWK, możesz umieścić go w pliku z .awk i nadać mu uprawnienia do wykonywania poleceniem chmod +x . Następnie możesz uruchomić skrypt poleceniem ./script_name.awk [files] .

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

#!/usr/bin/awk -f BEGIN {print "Witaj"}

Możesz uruchomić skrypt za pomocą następującego polecenia:

./cześć.awk

Co daje:

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 z formatem 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=cześć -v var2=świat -f cześć.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 POCZĄTEK {drukuj $zmienna1 " " $zmienna2}

Otrzymujesz:

Witaj świecie
  • Druga metoda polega na użyciu 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 możesz uzyskać dostęp do argumentów, używając indeksów 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:

Witaj świecie

Często zadawane pytania

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

GAWK to implementacja GNU języka AWK, która wzbogaca oryginalny język o dodatkowe funkcje, takie jak obsługa rozszerzonych wyrażeń regularnych, tablic wielowymiarowych i predefiniowanych funkcji.

Jak debugować skrypt AWK?

opcji -W z lint , która wyświetla komunikaty ostrzegawcze o potencjalnych błędach w skrypcie. Można również użyć -W z dump-variables , która wyświetla wartości zmiennych po zakończeniu wykonywania skryptu.

Jak sortować dane za pomocą polecenia AWK?

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

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

Łącząc AWK z innymi poleceniami (w tym przypadku sort ), można łatwo pójść o wiele 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ć zmiennej specjalnej NF , która zawiera liczbę pól w bieżącym wierszu, oraz zmiennej specjalnej NR , która zawiera numer bieżącego wiersza. Za pomocą pętli for można policzyć liczbę słów w każdym wierszu i dodać ją do zmiennej o nazwie total . Używając wzorca specjalnego END , można wydrukować wynik końcowy. Na przykład, jeśli plik o nazwie test.txt zawiera:

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

Liczbę słów w pliku można wyświetlić za pomocą następującego polecenia:

awk '{for (i=1; i<=NF; i++) total++} END {print total}' test.txt

Co daje:

9

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

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

Imię, nazwisko, wiek: Alice Dupont, 25 lat; Bob Martin, 32 lata; Charles Durand, 28 lat

Możesz wyodrębnić imię i wiek osób, korzystając z następującego polecenia:

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

Co daje:

Imię, wiek: Alicja 25, Bob 32, Karol 28

Jak filtrować dane za pomocą polecenia AWK?

Polecenie AWK umożliwia filtrowanie danych na podstawie wzorców, które są wyrażeniami regularnymi lub warunkami logicznymi. Wzorce są umieszczane przed akcjami i rozdzielane nawiasami klamrowymi. Na przykład, aby wyświetlić wiersze w pliku test.csv zawierające imię Alicja , można użyć następującego wzorca:

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

Co daje:

Alicja, Dupont, 25 lat

Jeśli chcesz wyświetlić wiersze w test.csv , które są starsze niż 30 lat, możesz użyć następującego wzorca:

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

Co daje:

Bob, Martin, 32

Możesz łączyć wiele wzorców za pomocą operatorów logicznych && (i), || (lub) i ! (nie). Na przykład, aby wyświetlić wiersze w pliku test.csv , których nazwa zaczyna się od C lub których wiek jest krótszy niż 10 lat, możesz użyć następującego wzorca:

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

Co daje:

CAMILLE, M, 7 CLARA, K, 11 CLEMENT, 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ć, wystarczy użyć zmiennych do przechowywania wartości pośrednich i aktualizować je w każdym wierszu. Używając specjalnego END , można wyświetlić wynik końcowy. Na przykład, aby obliczyć sumę i średnią wieku w pliku test.csv , można użyć następującego programu:

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

Co daje:

Razem: 110 Średnia: 18,3333

Wyjaśnienie:

  • -F"," służy do zdefiniowania przecinka jako separatora pól.
  • NR>1 stosujemy , aby zignorować pierwszy wiersz pliku, który zawiera nazwy kolumn.
  • Używamy zmiennych sum i count do akumulacji sumy i liczby wieków. Używamy operatora += do inkrementacji zmiennych o wartość trzeciego pola ( $3 ).
  • END służy / służy do obliczenia średniej poprzez podzielenie sumy przez liczbę.

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

awk -F"," 'NR>1 {jeśli (min=="") min=max=$3; jeśli ($3<min) min=$3; if ($3> max) max=$3} KONIEC {drukuj "Min: " min; drukuj 'Maks.: 'maks.}' test.csv

Co daje:

Min: 6 Maks: 32

Wyjaśnienie:

  • -F"," służy do zdefiniowania przecinka jako separatora pól.
  • NR>1 stosujemy , aby zignorować pierwszy wiersz pliku, który zawiera nazwy kolumn.
  • Zmienne min i max Jeśli są puste ( "" inicjujemy te zmienne wartością trzeciego pola ( $3 . Używamy operatorów < i > do porównywania wartości i aktualizacji zmiennych, jeśli to konieczne.
  • Wzorzec END do wyświetlania wyniku końcowego.

Wniosek

Polecenie AWK to niezbędne narzędzie do manipulowania tekstem w systemie Linux. Pozwala ono wykonywać złożone zadania w zaledwie kilku linijkach kodu, takie jak wyodrębnianie, filtrowanie, modyfikowanie czy obliczanie danych. Oferuje dużą elastyczność dzięki wzorcom, akcjom, funkcjom i zmiennym. Można je łączyć z innymi poleceniami systemu Linux, aby rozszerzyć jego możliwości. Na przykład, polecenie Echo w Windows umożliwia wyświetlenie komunikatu lub zmiennej na ekranie. Aby dowiedzieć się więcej o poleceniu AWK, zapoznaj się z instrukcją obsługi lub licznymi samouczkami dostępnymi online.

Poprzedni artykuł: Jak zabezpieczyć transfer plików za pomocą protokołu FTPS w Windows Server?
Następny artykuł: Jak uzyskać dostęp do YouTube Premium za darmo?
Cześć, tu François :) Pisarz w wolnym czasie, który uwielbia dzielić się swoją pasją: wszystkim, co związane z technologią! 😍 Niezależnie od tego, czy chodzi o sprzęt, oprogramowanie, gry wideo, media społecznościowe, czy wiele innych dziedzin, znajdziesz to wszystko na tej stronie. Dzielę się swoimi analizami, recenzjami, samouczkami i ulubionymi znaleziskami na różnych platformach. Jestem doświadczonym i wymagającym entuzjastą technologii, który nie tylko podąża za trendami, ale stara się pokierować Cię w stronę najlepszych rozwiązań. Bądźcie więc czujni!