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


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

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

Da bismo razumjeli kako radi, 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 znakom (*) na kraju svakog retka:

# 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 je li količina, četvrto polje svakog retka za unos, manje ili jednako 20, ako vrijednost ispunjava taj uvjet, ispisuje se i označava (*) znak na kraju koristeći izraz jedan: $4 <= 20
  2. Drugo, provjerava je li četvrto polje svakog retka unosa veće od 20, a ako redak ispunjava uvjet, ispisuje se pomoću izraza dva: $4 > 20

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

Dakle, nema potrebe ponovno izvršavati drugi izraz, $4 > 20 nakon ispisivanja već označenih redaka koji su ispisani pomoću prvog izraza.

Kako 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 što se jedan redak unosa ispiše pomoću $4 <= 20 { printf "%s\t%s\n", $0,"*" ; Sljedeći ; }, uključena naredba next pomoći će u preskakanju drugog izraza $4 > 20 { print $0 ;}, tako da izvršenje ide na sljedeći redak unosa bez gubljenja vremena na provjeru je li količina veća od 20.

Naredba next vrlo je važna za pisanje učinkovitih naredbi i gdje je potrebno, uvijek je možete koristiti za ubrzavanje izvršavanja skripte. Pripremite se za sljedeći dio serije gdje ćemo pogledati korištenje standardnog unosa (STDIN) kao unosa za Awk.

Nadamo se da će vam ovaj vodič biti od pomoći i da možete, kao i uvijek, napisati svoje mišljenje ostavljajući komentar u odjeljku za komentare ispod.