Kā izmantot nākamo komandu ar Awk Linux - 6. daļa


Šajā Awk sērijas sestajā daļā mēs aplūkosim, izmantojot komandu next , kas liek Awk izlaist visus atlikušos jūsu sniegtos modeļus un izteicienus, bet tā vietā nolasīt nākamo ievades rindu.

Komanda next palīdz novērst izpildi, ko es dēvētu par laika izšķiešanas soļiem komandas izpildē.

Lai saprastu, kā tas darbojas, ņemsim vērā failu ar nosaukumu food_list.txt, kas izskatās šādi:

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

Apsveriet iespēju palaist šo komandu, kas pārtikas preces, kuru daudzums ir mazāks vai vienāds ar 20, atzīmēs ar (*) zīmi katras rindas beigās:

# 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

Iepriekš minētā komanda darbojas šādi:

  1. Pirmkārt, tas pārbauda, vai katras ievades rindas ceturtais lauks ir mazāks vai vienāds ar 20, ja vērtība atbilst šim nosacījumam, tas tiek izdrukāts un atzīmēts ar zīmi (*) beigās, izmantojot izteicienu viens: $4 <= 20
  2. Otrkārt, tā pārbauda, vai katras ievades rindas ceturtais lauks ir lielāks par 20 un vai līnija atbilst nosacījumam, ko tā drukā, izmantojot otro izteicienu: $4> 20

Bet šeit ir viena problēma, kad tiek izpildīta pirmā izteiksme, rinda, kuru vēlamies atzīmēt, tiek izdrukāta, izmantojot: {printf "% s% s ", $0," ** ";} un tad tajā pašā darbībā tiek pārbaudīta arī otrā izteiksme, kas kļūst par laika izšķiešanas faktoru.

Tāpēc nav nepieciešams atkārtoti izpildīt otro izteiksmi $4> 20 pēc tam, kad ir izdrukātas jau atzīmētās līnijas, kas ir izdrukātas, izmantojot pirmo izteicienu.

Lai risinātu šo problēmu, jums jāizmanto komanda next šādi:

# 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

Kad viena ievades rindiņa ir izdrukāta, izmantojot $4 <= 20 {printf "% s% s ", $0," * "; next;} , iekļautā komanda next palīdzēs izlaist otro izteicienu $4> 20 {print $0; } , tāpēc izpilde pāriet uz nākamo ievades rindu, netērējot laiku, pārbaudot, vai daudzums ir lielāks par 20.

Nākamā komanda ir ļoti svarīga, ir efektīvu komandu rakstīšana, un, ja nepieciešams, jūs vienmēr varat to izmantot, lai paātrinātu skripta izpildi. Sagatavojieties nākamajai sērijas daļai, kur mēs aplūkosim standarta ievades (STDIN) izmantošanu kā Awk ievadi.

Ceru, ka jums tas noderēs, kā jūs vienmēr varat rakstiski izteikt savas domas, atstājot komentāru zemāk esošajā komentāru sadaļā.