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:
- 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
- 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.