Jak używać wyrażeń złożonych w Awk w systemie Linux — część 5
Przez cały czas sprawdzaliśmy, czy warunek został spełniony, czy nie, przyglądaliśmy się prostym wyrażeniom. Co się stanie, jeśli chcesz użyć więcej niż jednego wyrażenia do sprawdzenia określonego warunku?
W tym artykule przyjrzymy się, jak można połączyć wiele wyrażeń zwanych wyrażeniami złożonymi, aby sprawdzić warunek podczas filtrowania tekstu lub ciągów znaków.
W Awk wyrażenia złożone są budowane przy użyciu &&
określanych jako (i)
oraz | |
określane jako operatory złożone (lub)
.
Ogólna składnia wyrażeń złożonych jest następująca:
( first_expression ) && ( second_expression )
Tutaj pierwsze_wyrażenie
i drugie_wyrażenie
muszą mieć wartość true, aby całe wyrażenie było prawdziwe.
( first_expression ) || ( second_expression)
W tym przypadku jedno z wyrażeń pierwsze_wyrażenie
lub drugie_wyrażenie
musi być prawdziwe, aby całe wyrażenie było prawdziwe.
Uwaga: pamiętaj, aby zawsze dołączać nawiasy.
Wyrażenia można budować przy użyciu operatorów porównania, które omówiliśmy w części 4 serii awk.
Uzyskajmy teraz jasne zrozumienie na podstawie poniższego przykładu:
W tym przykładzie mamy plik tekstowy o nazwie tecmint_deals.txt
, który zawiera listę niesamowitych losowych ofert Tecmint, zawiera nazwę transakcji, cenę i rodzaj.
No Name Price Type
1 Mac_OS_X_Cleanup_Suite $9.99 Software
2 Basics_Notebook $14.99 Lifestyle
3 Tactical_Pen $25.99 Lifestyle
4 Scapple $19.00 Unknown
5 Nano_Tool_Pack $11.99 Unknown
6 Ditto_Bluetooth_Altering_Device $33.00 Tech
7 Nano_Prowler_Mini_Drone $36.99 Tech
Załóżmy, że chcemy drukować i oznaczać tylko oferty o wartości powyżej 20 USD i typu „Tech ”, używając znaku (**)
na końcu każdej linii.
Będziemy musieli uruchomić poniższe polecenie.
# awk '($3 ~ /^$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' tecmint_deals.txt
6 Ditto_Bluetooth_Altering_Device $33.00 Tech *
7 Nano_Prowler_Mini_Drone $36.99 Tech *
W tym przykładzie użyliśmy dwóch wyrażeń w wyrażeniu złożonym:
- Pierwsze wyrażenie, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; sprawdza linie z transakcjami z ceną powyżej 20 USD i jest to prawdą tylko wtedy, gdy wartość 3 USD, czyli cena, pasuje do wzorca /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
- I drugie wyrażenie, ($4 == „Tech”) ; sprawdza, czy transakcja jest typu „Tech ” i jest prawdziwa tylko wtedy, gdy wartość 4 $ jest równa „Tech ”.
Pamiętaj, że linia zostanie oznaczona (**)
tylko wtedy, gdy pierwsze wyrażenie i drugie wyrażenie są prawdziwe, zgodnie z zasadą operator &&
.
Streszczenie
Niektóre warunki zawsze wymagają zbudowania wyrażeń złożonych, które będą dokładnie odpowiadać oczekiwaniom. Kiedy zrozumiesz użycie operatorów porównania i wyrażeń złożonych, filtrowanie tekstu lub ciągów znaków na podstawie trudnych warunków stanie się łatwe.
Mamy nadzieję, że ten przewodnik okaże się przydatny. W przypadku jakichkolwiek pytań lub uzupełnień zawsze pamiętaj o pozostawieniu komentarza, a Twój problem zostanie odpowiednio rozwiązany.