Weboldal keresés

Összehasonlító operátorok használata az Awk-val Linuxban – 4. rész


Amikor egy szövegsorban numerikus vagy karakterlánc-értékekkel foglalkozik, a szövegek vagy karakterláncok összehasonlító operátorokkal történő szűrése jól jöhet az Awk parancsot használók számára.

Az Awk sorozatnak ebben a részében megvizsgáljuk, hogyan szűrhet szövegeket vagy karakterláncokat összehasonlító operátorok segítségével. Ha Ön programozó, akkor már ismernie kell az összehasonlító operátorokat, de aki még nem, hadd magyarázzam el az alábbi részben.

Mik azok az összehasonlító operátorok az Awk-ban?

Az Awk összehasonlító operátorai a számok vagy karakterláncok értékének összehasonlítására szolgálnak, és a következőket tartalmazzák:

  1. > – nagyobb, mint
  2. < – kevesebb, mint
  3. >= – nagyobb vagy egyenlő, mint
  4. <= – kisebb vagy egyenlő
  5. == – egyenlő
  6. != – nem egyenlő
  7. valamilyen_érték ~/minta/ – igaz, ha a some_value megegyezik a mintával
  8. valamilyen_érték !~/minta/ – igaz, ha a valamilyen_érték nem egyezik a mintával

Most, hogy megvizsgáltuk az Awk különböző összehasonlító operátorait, egy példa segítségével értsük meg őket jobban.

Ebben a példában van egy food_list.txt nevű fájlunk, amely különböző élelmiszerek bevásárlólistája, és szeretném megjelölni azokat az élelmiszereket, amelyek mennyisége kisebb vagy egyenlő 20-nál a ( **) az egyes sorok végén.

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

Az összehasonlító operátorok használatának általános szintaxisa az Awk-ban a következő:

expression { actions; }

A fenti cél eléréséhez az alábbi parancsot kell futtatnom:

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

A fenti példában két fontos dolog történik:

  1. Az első kifejezés { action ; } kombináció, $3 <= 30 { printf “%s\t%s\n”, $0”,**” ; A } kinyomtatja a 30-nál kisebb vagy azzal egyenlő számú sorokat, és minden sor végéhez hozzáad egy (**)-t. A mennyiség értéke a $3 mezőváltozó használatával érhető el.
  2. A második kifejezés { action ; } kombináció, a $3 > 30 { print $0 ;} változatlan formában nyomtatja ki a sorokat, mivel mennyiségük nagyobb, mint 30.

Még egy példa:

# 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

Ebben a példában a 20-nál kisebb vagy egyenlő mennyiségű sorokat az (TRUE) szóval a végén szeretnénk jelezni.

Összegzés

Ez egy bevezető útmutató az Awk összehasonlító operátoraihoz, ezért sok más lehetőséget is ki kell próbálnia, és többet kell felfedeznie.

Ha bármilyen problémával szembesül, vagy bármilyen kiegészítést szeretne, írjon megjegyzést az alábbi megjegyzés szakaszba. Ne felejtse el elolvasni az Awk sorozat következő részét, ahol végigvezetem az összetett kifejezéseken.