Vyhledávání na webu

Jak používat porovnávací operátory s Awk v Linuxu – část 4


Při práci s číselnými nebo řetězcovými hodnotami v řádku textu se uživatelům příkazu Awk hodí filtrování textu nebo řetězců pomocí porovnávacích operátorů.

V této části série Awk se podíváme na to, jak můžete filtrovat text nebo řetězce pomocí porovnávacích operátorů. Pokud jste programátor, musíte být obeznámeni s operátory porovnávání, ale ti, kteří ne, mi dovolte vysvětlit v části níže.

Co jsou porovnávací operátory v Awk?

Porovnávací operátory v Awk se používají k porovnání hodnoty čísel nebo řetězců a zahrnují následující:

  1. > – větší než
  2. < – méně než
  3. >= – větší nebo rovno
  4. <= – menší nebo rovno
  5. == – rovno
  6. != – nerovná se
  7. some_value ~/pattern/ – true, pokud se nějaká_hodnota shoduje se vzorem
  8. some_value !~/pattern/ – true, pokud některá_hodnota neodpovídá vzoru

Nyní, když jsme se podívali na různé operátory porovnání v Awk, pojďme jim lépe porozumět na příkladu.

V tomto příkladu máme soubor s názvem food_list.txt, což je nákupní seznam pro různé potraviny, a já bych chtěl označit potraviny, jejichž množství je menší nebo rovno 20 přidáním ( **) na konci každého řádku.

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

Obecná syntaxe pro použití operátorů porovnání v Awk je:

expression { actions; }

Abych dosáhl výše uvedeného cíle, budu muset spustit následující příkaz:

# 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	**

Ve výše uvedeném příkladu se stanou dvě důležité věci:

  1. První výraz { akce ; } kombinace, 3 $<= 30 { printf “%s\t%s\n”, $0,”**” ; } vytiskne řádky s počtem menším než nebo rovným 30 a na konec každého řádku přidá (**). K hodnotě množství se přistupuje pomocí proměnné pole 3 $.
  2. Druhý výraz { akce ; } kombinace, 3 $> 30 { tisk $0 ;} vytiskne řádky beze změny, protože jejich množství je větší než 30.

Ještě jeden příklad:

# 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

V tomto příkladu chceme označit řádky s množstvím menším nebo rovným 20 se slovem (TRUE) na konci.

souhrn

Toto je úvodní návod pro operátory porovnávání v Awk, proto musíte vyzkoušet mnoho dalších možností a objevit další.

V případě jakýchkoli problémů, kterým čelíte, nebo jakýchkoli dodatků, které máte na mysli, napište komentář do sekce komentářů níže. Nezapomeňte si přečíst další díl série Awk, kde vás provedu složenými výrazy.