Wyszukiwanie w witrynie

Jak używać operatorów porównania w Awk w systemie Linux — część 4


Kiedy mamy do czynienia z wartościami liczbowymi lub ciągami tekstowymi w wierszu tekstu, filtrowanie tekstu lub ciągów za pomocą operatorów porównania przydaje się użytkownikom poleceń Awk.

W tej części serii Awk przyjrzymy się, jak można filtrować tekst lub ciągi znaków za pomocą operatorów porównania. Jeśli jesteś programistą, musisz już znać operatory porównania, ale te, które nie są, pozwól, że wyjaśnię to w poniższej sekcji.

Czym są operatory porównania w Awk?

Operatory porównania w Awk służą do porównywania wartości liczb lub ciągów znaków i obejmują one:

  1. > – większy niż
  2. < – mniej niż
  3. >= – większy lub równy
  4. <= – mniejszy lub równy
  5. == – równe
  6. != – nie jest równy
  7. jakaś_wartość ~/wzór/ – prawda, jeśli jakaś_wartość pasuje do wzorca
  8. jakaś_wartość !~/wzór/ – prawda, jeśli jakaś_wartość nie pasuje do wzorca

Teraz, gdy przyjrzeliśmy się różnym operatorom porównania w Awk, zrozumiemy je lepiej na przykładzie.

W tym przykładzie mamy plik o nazwie food_list.txt, który jest listą zakupów różnych produktów spożywczych i chciałbym oznaczyć produkty spożywcze, których ilość jest mniejsza lub równa 20, dodając ( **) na końcu każdej linii.

No      Item_Name               Quantity        Price
1       Mangoes                    45           $3.45
2       Apples                     25           $2.45
3       Pineapples                 5            $4.45
4       Tomatoes                   25           $3.45
5       Onions                     15           $1.45
6       Bananas                    30           $3.45

Ogólna składnia używania operatorów porównania w Awk jest następująca:

expression { actions; }

Aby osiągnąć powyższy cel, będę musiał uruchomić poniższe polecenie:

# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt

No	Item_Name`		Quantity	Price
1	Mangoes	      		   45		$3.45
2	Apples			   25		$2.45	**
3	Pineapples		   5		$4.45	**
4	Tomatoes		   25		$3.45	**
5	Onions			   15           $1.45	**
6	Bananas			   30           $3.45	**

W powyższym przykładzie mają miejsce dwie ważne rzeczy:

  1. Pierwsze wyrażenie { akcja ; kombinacja, 3 $<= 30 { printf „%s\t%s\n”, $0,”**” ; wypisuje wiersze o liczbie mniejszej lub równej 30 i dodaje (**) na końcu każdego wiersza. Dostęp do wartości ilości uzyskuje się za pomocą zmiennej pola $3.
  2. Drugie wyrażenie { akcja ; kombinacja, $3 > 30 { print $0 ; wypisuje linie bez zmian, ponieważ ich ilość jest większa niż 30.

Jeszcze jeden przykład:

# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20  { print $0 ;} ' food_list.txt 

No	Item_Name		Quantity	Price
1	Mangoes			   45		$3.45
2	Apples			   25		$2.45
3	Pineapples		   5		$4.45	TRUE
4	Tomatoes		   25		$3.45
5	Onions			   15           $1.45	TRUE
6       Bananas	                   30           $3.45

W tym przykładzie chcemy wskazać linie o ilości mniejszej lub równej 20 słowem (TRUE) na końcu.

Streszczenie

To jest tutorial wprowadzający do operatorów porównań w Awk, dlatego musisz wypróbować wiele innych opcji i dowiedzieć się więcej.

W przypadku jakichkolwiek problemów, które napotkasz lub jakichkolwiek dodatków, które masz na myśli, zostaw komentarz w sekcji komentarzy poniżej. Pamiętaj o przeczytaniu kolejnej części serii Awk, w której przeprowadzę Cię przez wyrażenia złożone.