Wéi benotzen ech den nächste Kommando mat Awk am Linux - Deel 6


An dësem sechsten Deel vun der Awk Serie wäerte mir kucken op de Kommando next ze benotzen, deen Awk seet all verbleiwen Musteren an Ausdréck ze sprangen déi Dir geliwwert hutt, awer amplaz déi nächst Input Linn ze liesen.

De Kommando nächst hëlleft Iech fir ze verhënneren datt Dir dat ausféiert wat ech als Zäitverschwendende Schrëtt an enger Kommandoausféierung bezeechnen.

Fir ze verstoen wéi et funktionnéiert, loosst eis eng Datei mam Numm food_list.txt betruechten, déi esou ausgesäit:

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

Betruecht de folgende Kommando auszeféieren, deen d'Liewensmëttelen, deenen hir Quantitéit manner wéi oder gläich wéi 20 ass, mat engem (*) Zeechen um Enn vun all Zeil markéiert:

# 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

De Kommando uewen funktionnéiert tatsächlech wéi follegt:

  1. Fir d'éischt kontrolléiert et ob d'Quantitéit, véiert Feld vun all Input Linn manner wéi oder gläich wéi 20 ass, wann e Wäert deem Bedingung entsprécht, gëtt et gedréckt a markéiert mam (*) Zeechen um Enn benotzt Ausdrock een: $4 <= 20
  2. Zweetens kontrolléiert et ob dat véiert Feld vun all Input Zeil méi wéi 20 ass, a wann eng Zeil den Konditioun entsprécht, gëtt se mat Ausdrock zwee gedréckt: $4 > 20

Awer et gëtt e Problem hei, wann den éischten Ausdrock ausgeführt gëtt, gëtt eng Zeil déi mir wëllen markéieren gedréckt mat: { printf \%s %s \, $0,\**\ ; } an dann am selwechte Schrëtt gëtt den zweeten Ausdrock och gepréift, deen en Zäitverschwendungsfaktor gëtt.

Also et ass net néideg den zweeten Ausdrock auszeféieren, $4 > 20 nach eng Kéier nodeems Dir scho markéiert Zeilen gedréckt huet, déi mam éischten Ausdrock gedréckt goufen.

Fir mat dësem Problem ze këmmeren, musst Dir de Kommando nächst benotzen wéi follegt:

# 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

Nodeems eng eenzeg Input Linn gedréckt gëtt mat $4 <= 20 { printf \%s %s \, $0,\*\ ; nächst ; }, de nächste Kommando mat abegraff hëlleft den zweeten Ausdrock $4 > 20 { $0 ;} drécken, sou datt d'Ausféierung op déi nächst Input Linn geet ouni Zäit ze verschwenden fir ze kontrolléieren ob d'Quantitéit méi wéi 20 ass.

Den nächste Kommando ass ganz wichteg ass effizient Kommandoen ze schreiwen a wou néideg, kënnt Dir ëmmer benotze fir d'Ausféierung vun engem Skript ze beschleunegen. Bereet Iech op den nächsten Deel vun der Serie vir, wou mir de Standardinput (STDIN) als Input fir Awk kucken.

Hoffen Dir fannt dëst wéi Dir hëllefräich guidéiert an Dir kënnt wéi ëmmer Är Gedanken schrëftlech setzen andeems Dir e Kommentar an der Kommentarsektioun hei drënner hannerloosst.