Seuraavan komennon käyttäminen Awkin kanssa Linuxissa - Osa 6


Tässä Awk-sarjan kuudennessa osassa tarkastelemme next-komentoa, joka käskee Awk ohittamaan kaikki muut antamasi mallit ja lausekkeet, mutta lukemaan sen sijaan seuraavan. syöttölinja.

next-komento auttaa sinua estämään komennon suorittamisen aikana kutsuttujen aikaa vievien vaiheiden suorittamisen.

Ymmärtääksemme, miten se toimii, harkitsemme tiedostoa nimeltä food_list.txt, joka näyttää tältä:

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

Harkitse seuraavan komennon suorittamista, joka merkitsee ruoat, joiden määrä on pienempi tai yhtä suuri kuin 20, (*)-merkillä jokaisen rivin lopussa:

# 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

Yllä oleva komento toimii itse asiassa seuraavasti:

  1. Ensin se tarkistaa, onko kunkin syöttörivin määrä, neljäs kenttä pienempi tai yhtä suuri kuin 20. Jos arvo täyttää tämän ehdon, se tulostetaan ja merkitään (*) . merkki lopussa käyttäen lauseketta yksi: $4 <= 20
  2. Toiseksi se tarkistaa, onko kunkin syöttörivin neljäs kenttä suurempi kuin 20, ja jos rivi täyttää ehdon, se tulostetaan lausekkeella kaksi: $4 > 20

Mutta tässä on yksi ongelma: kun ensimmäinen lauseke suoritetaan, rivi, jonka haluamme merkitä, tulostetaan käyttämällä: { printf "%s\t%s\n", $0, "**" ; } ja sitten samassa vaiheessa tarkistetaan myös toinen lauseke, josta tulee aikaa hukkaava tekijä.

Joten ei tarvitse suorittaa toista lauseketta, $4 > 20 uudelleen, kun olet tulostanut jo merkittyjä rivejä, jotka on tulostettu käyttämällä ensimmäistä lauseketta.

Tämän ongelman ratkaisemiseksi sinun on käytettävä next-komentoa seuraavasti:

# 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

Kun yksi syöttörivi on tulostettu käyttämällä $4 <= 20 { printf "%s\t%s\n", $0,"*" ; Seuraava ; }, mukana oleva next-komento auttaa ohittamaan toisen lausekkeen $4 > 20 { print $0 ;}, joten suoritus menee seuraavalle syöttöriville ilman, että sinun tarvitsee tuhlata aikaa tarkistaaksesi, onko määrä suurempi kuin 20.

Next-komento on erittäin tärkeä, sillä se kirjoittaa tehokkaita komentoja, ja tarvittaessa voit aina nopeuttaa komentosarjan suorittamista. Valmistaudu sarjan seuraavaan osaan, jossa tarkastellaan vakiosyötteen (STDIN) käyttöä Awk-syötteenä.

Toivottavasti tämä opastus auttaa sinua ja voit aina kirjoittaa ajatuksesi kirjallisesti jättämällä kommentin alla olevaan kommenttiosaan.