Vertailuoperaattoreiden käyttäminen Awkin kanssa Linuxissa - Osa 4


Kun käsitellään tekstirivin numeerisia tai merkkijonoarvoja, tekstin tai merkkijonojen suodattaminen vertailuoperaattoreiden avulla on hyödyllistä Awk-komentojen käyttäjille.

Tässä Awk-sarjan osassa tarkastellaan, kuinka voit suodattaa tekstiä tai merkkijonoja vertailuoperaattoreiden avulla. Jos olet ohjelmoija, sinun on jo tunnettava vertailuoperaattorit, mutta ne, jotka eivät ole, anna minun selittää alla olevassa osiossa.

Mitä vertailuoperaattorit ovat Awkissa?

Awkin vertailuoperaattoreita käytetään vertaamaan numeroiden tai merkkijonojen arvoja, ja ne sisältävät seuraavat:

  1. > – suurempi kuin
  2. < – vähemmän kuin
  3. >= – suurempi tai yhtä suuri kuin
  4. <= – pienempi tai yhtä suuri kuin
  5. == – yhtä suuri kuin
  6. != – ei yhtä suuri kuin
  7. joku_arvo ~/kuvio/ – tosi, jos jokin_arvo vastaa kuviota
  8. joku_arvo !~/kuvio/ – tosi, jos jokin_arvo ei vastaa kuviota

Nyt kun olemme tarkastelleet erilaisia vertailuoperaattoreita Awkissa, ymmärrämme ne paremmin esimerkin avulla.

Tässä esimerkissä meillä on tiedosto nimeltä food_list.txt, joka on ostoslista eri elintarvikkeille. Haluaisin merkitä ruokatuotteet, joiden määrä on pienempi tai yhtä suuri kuin 20, lisäämällä ( **) jokaisen rivin lopussa.

No      Item_Name               Quantity        Price
1       Mangoes                    45           $3.45
2       Apples                     25           $2.45
3       Pineapples                 5            $4.45
4       Tomatoes                   25           $3.45
5       Onions                     15           $1.45
6       Bananas                    30           $3.45

Yleinen syntaksi vertailuoperaattoreiden käyttämiselle Awkissa on:

expression { actions; }

Yllä olevan tavoitteen saavuttamiseksi minun on suoritettava alla oleva komento:

# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt

No	Item_Name`		Quantity	Price
1	Mangoes	      		   45		$3.45
2	Apples			   25		$2.45	**
3	Pineapples		   5		$4.45	**
4	Tomatoes		   25		$3.45	**
5	Onions			   15           $1.45	**
6	Bananas			   30           $3.45	**

Yllä olevassa esimerkissä tapahtuu kaksi tärkeää asiaa:

  1. Ensimmäinen lauseke { action ; } yhdistelmä, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } tulostaa rivit, joiden määrä on pienempi tai yhtä suuri kuin 30, ja lisää (**)-merkin jokaisen rivin loppuun. Määrän arvoa tarkastellaan $3-kenttämuuttujan avulla.
  2. Toinen lauseke { action ; }-yhdistelmä, 3 $> 30 { print $0 ;} tulostaa rivit muuttumattomina, koska niiden määrä on suurempi kuin 30.

Vielä yksi esimerkki:

# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20  { print $0 ;} ' food_list.txt 

No	Item_Name		Quantity	Price
1	Mangoes			   45		$3.45
2	Apples			   25		$2.45
3	Pineapples		   5		$4.45	TRUE
4	Tomatoes		   25		$3.45
5	Onions			   15           $1.45	TRUE
6       Bananas	                   30           $3.45

Tässä esimerkissä haluamme osoittaa rivit, joiden määrä on pienempi tai yhtä suuri kuin 20 ja jonka lopussa on sana (TRUE).

Yhteenveto

Tämä on johdanto-opas Awkin vertailuoperaattoreille, joten sinun on kokeiltava monia muita vaihtoehtoja ja löydettävä lisää.

Jos sinulla on ongelmia tai sinulla on mielessäsi lisäyksiä, jätä kommentti alla olevaan kommenttiosaan. Muista lukea Awk-sarjan seuraava osa, jossa opastan sinut yhdistelmälausekkeiden läpi.