Sådan bruges næste kommando med Awk i Linux - Del 6


I denne sjette del af Awk-serien skal vi se på ved hjælp af next -kommandoen, som fortæller Awk at springe over alle resterende mønstre og udtryk, som du har givet, men i stedet læse den næste inputlinje.

Kommandoen næste hjælper dig med at forhindre udførelse af det, jeg vil henvise til som tidskrævende trin i en kommandokørsel.

For at forstå hvordan det fungerer, lad os overveje en fil kaldet food_list.txt, der ser sådan ud:

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

Overvej at køre følgende kommando, der markerer madvarer, hvis mængde er mindre end eller lig med 20 med et (*) -tegn i slutningen af hver linje:

# 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

Kommandoen ovenfor fungerer faktisk som følger:

  1. For det første kontrollerer det, om mængden, det fjerde felt for hver inputlinje er mindre end eller lig med 20, hvis en værdi opfylder denne betingelse, udskrives den og markeres med (*) -tegnet i slutningen ved hjælp af udtryk et: $ 4 <= 20
  2. For det andet kontrollerer den, om det fjerde felt i hver inputlinje er større end 20, og hvis en linje opfylder betingelsen, bliver den udskrevet ved hjælp af udtryk to: $ 4> 20

Men der er et problem her, når det første udtryk udføres, udskrives en linje, som vi vil markere, ved hjælp af: {printf "% s% s ", $ 0," ** ";} og i samme trin kontrolleres det andet udtryk også, hvilket bliver en tidsspildende faktor.

Så det er ikke nødvendigt at udføre det andet udtryk $ 4> 20 igen efter udskrivning af allerede markerede linjer, der er blevet udskrevet ved hjælp af det første udtryk.

For at løse dette problem skal du bruge kommandoen næste som følger:

# 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

Efter at en enkelt indtastningslinje er udskrevet med $ 4 <= 20 {printf "% s% s ", $ 0," * "; næste;} , kommandoen næste hjælper med at springe det andet udtryk over $ 4> 20 {print $ 0; } , så udførelse går til den næste inputlinje uden at skulle spilde tid på at kontrollere, om mængden er større end 20.

Den næste kommando er meget vigtig, er at skrive effektive kommandoer, og hvor det er nødvendigt, kan du altid bruge til at fremskynde udførelsen af et script. Forbered dig på den næste del af serien, hvor vi skal se på at bruge standardindgang (STDIN) som input til Awk.

Håber du finder denne vejledning nyttig, og du kan som altid sætte dine tanker skriftligt ved at efterlade en kommentar i kommentarfeltet nedenfor.