Weboldal keresés

A „next” parancs használata az Awk-val Linux alatt – 6. rész


Az Awk sorozatnak ebben a hatodik részében a next parancsot fogjuk használni, amely arra utasítja az Awkt, hogy hagyja ki az összes többi megadott mintát és kifejezést, de ehelyett olvassa el a következőt. bemeneti sor.

A next parancs segít megakadályozni az általam időpazarló lépések végrehajtását a parancsvégrehajtás során.

Ahhoz, hogy megértsük, hogyan működik, nézzünk meg egy food_list.txt nevű fájlt, amely így néz ki:

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

Fontolja meg a következő parancs futtatását, amely megjelöli azokat az élelmiszereket, amelyek mennyisége 20 vagy annál kisebb, (*) jellel minden sor végén:

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

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

A fenti parancs valójában a következőképpen működik:

  1. Először is ellenőrzi, hogy a mennyiség, az egyes beviteli sorok negyedik mezője kisebb-e vagy egyenlő-e 20-nál. Ha egy érték megfelel ennek a feltételnek, akkor kinyomtatja és megjelöli a (*) jellel. jel a végén egy kifejezés használatával: $4 <= 20
  2. Másodszor, ellenőrzi, hogy az egyes beviteli sorok negyedik mezője nagyobb-e, mint 20, és ha egy sor megfelel a feltételnek, akkor a második kifejezés használatával nyomtatja ki: $4 > 20

De van egy probléma, amikor az első kifejezés végrehajtásra kerül, egy sor, amelyet meg akarunk jelölni, a következővel nyomtatódik ki: { printf "%s\t%s\n", $0, "**" ; }, majd ugyanebben a lépésben a második kifejezés is ellenőrzésre kerül, ami időpazarló tényezővé válik.

Így nem kell újra végrehajtani a második kifejezést, a $4 > 20-t, miután kinyomtatta a már megjelölt sorokat, amelyek az első kifejezéssel lettek kinyomtatva.

A probléma megoldásához a következőképpen kell használnia a next parancsot:

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

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

Miután egyetlen beviteli sort nyomtatott a $4 <= 20 használatával { printf "%s\t%s\n", $0,"*" ; következő ; }, a mellékelt next parancs segít kihagyni a második kifejezést: $4 > 20 { print $0 ;}, így a végrehajtás a következő beviteli sort anélkül, hogy időt vesztegetne annak ellenőrzésére, hogy a mennyiség nagyobb-e 20-nál.

A next parancs nagyon fontos, hogy hatékony parancsokat írjon, és ahol szükséges, bármikor felgyorsíthatja a parancsfájl végrehajtását. Készüljön fel a sorozat következő részére, ahol az Awk szabvány bemeneti (STDIN) bemenetét fogjuk használni.

Reméljük, hogy hasznosnak találja ezt az útmutatót, és mint mindig, írásban is megfogalmazhatja gondolatait, ha megjegyzést hagy az alábbi megjegyzés szakaszban.