Hvernig á að nota næstu skipun með Awk í Linux - Part 6


Í þessum sjötta hluta Awk röð, munum við skoða að nota next skipunina, sem segir Awk að sleppa öllum mynstrum og tjáningum sem þú hefur gefið upp, en lesa í staðinn næstu innsláttarlínu.

next skipunin hjálpar þér að koma í veg fyrir að framkvæma það sem ég myndi vísa til sem tímaeyðandi skref í framkvæmd skipana.

Til að skilja hvernig það virkar, skulum við íhuga skrá sem heitir food_list.txt sem lítur svona út:

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

Íhugaðu að keyra eftirfarandi skipun sem mun flagga matvöru sem er minna en eða jafnt og 20 með (*) tákni í lok hverrar línu:

# 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

Skipunin hér að ofan virkar í raun sem hér segir:

  1. Í fyrsta lagi athugar það hvort magn, fjórði reitur hverrar inntakslínu sé minna en eða jafnt og 20, ef gildi uppfyllir það skilyrði er það prentað og merkt með (*) tákninu í lokin með því að nota tjáningu eitt: $4 <= 20
  2. Í öðru lagi athugar það hvort fjórði reiturinn í hverri innsláttarlínu sé stærri en 20 og ef lína uppfyllir skilyrðið er hún prentuð með því að nota tjáningu tvö: $4 > 20

En það er eitt vandamál hér, þegar fyrsta segðin er keyrð, er lína sem við viljum flagga prentuð með: { printf \%s %s \, $0,\**\ ; } og síðan í sama skrefi er önnur tjáningin einnig merkt sem verður tímaeyðandi þáttur.

Svo það er engin þörf á að keyra seinni tjáninguna, $4 > 20 aftur eftir að hafa prentað þegar merktar línur sem hafa verið prentaðar með því að nota fyrstu tjáninguna.

Til að takast á við þetta vandamál þarftu að nota skipunina næsta sem hér segir:

# 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

Eftir að ein inntakslína hefur verið prentuð með $4 <= 20 { printf \%s %s \, $0,\*\ ; næst ; }, næsta skipunin sem fylgir mun hjálpa til við að sleppa annarri tjáningu $4 > 20 { prentaðu $0 ;}, þannig að framkvæmd fer í næstu innsláttarlínu án þess að þurfa að eyða tíma í að athuga hvort magnið sé meira en 20.

Næsta skipun er mjög mikilvæg er að skrifa skilvirkar skipanir og þar sem nauðsyn krefur er alltaf hægt að nota til að flýta fyrir framkvæmd handrits. Undirbúðu þig fyrir næsta hluta seríunnar þar sem við munum skoða að nota staðlað inntak (STDIN) sem inntak fyrir Awk.

Vona að þér finnist þetta gagnlegt að leiðbeina og þú getur eins og alltaf skrifað hugsanir þínar með því að skilja eftir athugasemd í athugasemdareitnum hér að neðan.