Kaip naudoti komandą „next“ su „Awk“ sistemoje „Linux“ – 6 dalis


Šioje šeštoje Awk serijos dalyje apžvelgsime komandą next, kuri liepia Awk praleisti visus likusius jūsų pateiktus šablonus ir išraiškas, bet vietoj to perskaitykite kitą. įvesties linija.

Komanda next padeda išvengti komandų vykdymo veiksmų, kuriuos pavadinčiau kaip laiko gaišinančius veiksmus.

Norėdami suprasti, kaip tai veikia, panagrinėkime failą, pavadintą food_list.txt, kuris atrodo taip:

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

Apsvarstykite galimybę paleisti šią komandą, kuri pažymės maisto produktus, kurių kiekis yra mažesnis arba lygus 20 su (*) ženklu kiekvienos eilutės pabaigoje:

# 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

Aukščiau pateikta komanda iš tikrųjų veikia taip:

  1. Pirmiausia patikrinama, ar kiekvienos įvesties eilutės ketvirtasis laukas yra mažesnis arba lygus 20. Jei reikšmė atitinka šią sąlygą, ji atspausdinama ir pažymima (*) ženklą pabaigoje naudodami vieną išraišką: $4 <= 20
  2. Antra, patikrinama, ar kiekvienos įvesties eilutės ketvirtasis laukas yra didesnis nei 20, ir jei eilutė atitinka sąlygą, ji išspausdinama naudojant antrą išraišką: $4 > 20

Tačiau čia yra viena problema: kai vykdoma pirmoji išraiška, eilutė, kurią norime pažymėti, išspausdinama naudojant: { printf "%s\t%s\n", $0, "**"; }, tada tame pačiame veiksme taip pat patikrinama antra išraiška, kuri tampa laiko švaistymo veiksniu.

Taigi, išspausdinus jau pažymėtas eilutes, kurios buvo išspausdintos naudojant pirmąją išraišką, nebereikia vykdyti antrosios išraiškos $4 > 20.

Norėdami išspręsti šią problemą, turite naudoti komandą next taip:

# 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

Atspausdinus vieną įvesties eilutę naudojant $4 <= 20 { printf "%s\t%s\n", $0,"*" ; Kitas ; }, įtraukta komanda next padės praleisti antrąją išraišką $4 > 20 { print $0 ;}, todėl vykdymas vyksta kitą įvesties eilutę, negaišdami laiko tikrindami, ar kiekis didesnis nei 20.

Komanda kita yra labai svarbi veiksmingų komandų rašymas ir, jei reikia, visada galite ją naudoti norėdami pagreitinti scenarijaus vykdymą. Pasiruoškite kitai serijos daliai, kurioje apžvelgsime standartinės įvesties (STDIN) naudojimą kaip Awk įvestį.

Tikimės, kad šis vadovas jums bus naudingas ir, kaip visada, galite išdėstyti savo mintis raštu, palikdami komentarą žemiau esančiame komentarų skyriuje.