Kako koristiti naredbu 'next' s Awk u Linuxu - 6. dio


U ovom šestom dijelu Awk serije, pogledat ćemo korištenje naredbe next, koja govori Awk da preskoči sve preostale obrasce i izraze koje ste dali, ali umjesto toga pročitajte sljedeći ulazna linija.

Naredba next pomaže vam da spriječite izvršavanje onoga što bih nazvao koracima koji gube vrijeme u izvršavanju naredbe.

Da bismo razumjeli kako to funkcionira, razmotrimo datoteku pod nazivom food_list.txt koja izgleda ovako:

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

Razmislite o pokretanju sljedeće naredbe koja će označiti namirnice čija je količina manja ili jednaka 20 sa znakom (*) na kraju svakog reda:

# 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

Gornja naredba zapravo radi na sljedeći način:

  1. Prvo, provjerava da li je količina, četvrto polje svake ulazne linije manja ili jednaka 20, ako vrijednost ispunjava taj uslov, ispisuje se i označava sa (*) znak na kraju koristeći izraz jedan: $4 <= 20
  2. Drugo, provjerava da li je četvrto polje svake ulazne linije veće od 20, i ako linija ispunjava uslov, ispisuje se pomoću izraza dva: $4 > 20

Ali ovdje postoji jedan problem, kada se prvi izraz izvrši, linija koju želimo označiti se ispisuje pomoću: { printf "%s\t%s\n", $0, "**" ; }, a zatim u istom koraku, drugi izraz se također provjerava što postaje faktor gubljenja vremena.

Dakle, nema potrebe za izvršavanjem drugog izraza, $4 > 20 ponovo nakon ispisa već označenih linija koje su ispisane korištenjem prvog izraza.

Da biste riješili ovaj problem, morate koristiti naredbu next na sljedeći način:

# 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

Nakon odštampanja jedne linije unosa pomoću $4 <= 20 { printf "%s\t%s\n", $0,"*" ; sljedeći ; }, uključena komanda next će pomoći da se preskoči drugi izraz $4 > 20 { print $0 ;}, tako da se izvršavanje ide na sljedeći red za unos bez gubljenja vremena na provjeru da li je količina veća od 20.

Sljedeća komanda je veoma važna je pisanje efikasnih komandi i gdje je potrebno, uvijek možete koristiti da ubrzate izvršavanje skripte. Pripremite se za sljedeći dio serije gdje ćemo pogledati korištenje standardnog ulaza (STDIN) kao ulaza za Awk.

Nadam se da će vam ovo uputstvo biti od pomoći i kao i uvijek možete napisati svoje mišljenje tako što ćete ostaviti komentar u odeljku za komentare ispod.