Kif tuża l-kmand li jmiss b'Awk fil-Linux - Parti 6


F'din is-sitt parti tas-serje Awk, se nħarsu lejn l-użu tal-kmand next, li jgħid lil Awk biex taqbeż il-mudelli u l-espressjonijiet kollha li jkun ipprovdejt, iżda minflok aqra l-linja tad-dħul li jmiss.

Il-kmand li jmiss jgħinek tipprevjeni li tesegwixxi dak li jien nirreferi għalih bħala passi li jaħlu l-ħin fl-eżekuzzjoni tal-kmand.

Biex tifhem kif taħdem, ejja nikkunsidraw fajl imsejjaħ food_list.txt li jidher bħal dan:

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

Ikkunsidra li tħaddem il-kmand li ġej li se jimmarka oġġetti tal-ikel li l-kwantità tagħhom hija inqas minn jew ugwali għal 20 b'sinjal (*) fl-aħħar ta' kull linja:

# 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

Il-kmand ta 'hawn fuq fil-fatt jaħdem kif ġej:

  1. L-ewwel, jiċċekkja jekk il-kwantità, ir-raba' qasam ta' kull linja ta' input huwiex inqas minn jew ugwali għal 20, jekk valur jissodisfa dik il-kundizzjoni, jiġi stampat u mmarkat bis-sinjal (*) fl-aħħar billi tuża l-espressjoni waħda: $4 <= 20
  2. It-tieni, jiċċekkja jekk ir-raba' qasam ta' kull linja ta' input huwiex akbar minn 20, u jekk linja tissodisfax il-kundizzjoni tiġi stampata bl-użu ta' l-espressjoni tnejn: $4 > 20

Iżda hawn problema waħda, meta l-ewwel espressjoni tiġi eżegwita, linja li rridu nimmarkaw tiġi stampata bl-użu: { printf \%s %s \, $0,\**\ ; } u mbagħad fl-istess pass, tiġi kkontrollata wkoll it-tieni espressjoni li ssir fattur ta' ħela ta' ħin.

Allura m'hemmx bżonn li tesegwixxi t-tieni espressjoni, $4 > 20 għal darb'oħra wara l-istampar ta 'linji diġà mmarkati li ġew stampati bl-użu tal-ewwel espressjoni.

Biex tittratta din il-problema, trid tuża l-kmand li jmiss kif ġej:

# 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

Wara li linja ta' input waħda tiġi stampata bl-użu ta' $4 <= 20 { printf \%s %s \, $0,\*\ ; li jmiss ; }, il-kmand li jmiss inkluż se jgħin biex taqbeż it-tieni espressjoni $4 > 20 { print $0 ;}, għalhekk l-eżekuzzjoni tmur għall-linja tad-dħul li jmiss mingħajr ma jkollok għalfejn taħli ħin biex tiċċekkja jekk il-kwantità hijiex akbar minn 20.

Il-kmand li jmiss huwa importanti ħafna huwa l-kitba ta 'kmandi effiċjenti u fejn meħtieġ, dejjem tista' tuża biex tħaffef l-eżekuzzjoni ta 'skript. Ipprepara għall-parti li jmiss tas-serje fejn se nħarsu lejn l-użu ta' input standard (STDIN) bħala input għal Awk.

Nittama li ssib dan il-gwida ta' għajnuna u tista' bħal dejjem tpoġġi l-ħsibijiet tiegħek bil-miktub billi tħalli kumment fit-taqsima tal-kummenti hawn taħt.