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