Kuidas kasutada Linuxis Awkiga võrdlusoperaatoreid - 4. osa


Numbriliste või stringiväärtuste käsitlemisel tekstireas on teksti või stringide filtreerimine võrdlusoperaatorite abil Awk-käsu kasutajatele kasuks.

Selles Awk-seeria osas vaatleme, kuidas saate teksti või stringe filtreerida võrdlusoperaatorite abil. Kui olete programmeerija, peate juba olema tuttav võrdlusoperaatoritega, kuid nendega, kes pole, lubage mul selgitada allpool olevas jaotises.

Awki võrdlusoperaatoreid kasutatakse numbrite või stringide väärtuse võrdlemiseks ja need sisaldavad järgmist:

  1. > - suurem kui
  2. < - vähem kui
  3. > = - suurem või võrdne
  4. <= - väiksem või võrdne
  5. == - võrdne
  6. ! = - pole võrdne
  7. some_value ~/pattern/ - tõene, kui mõni_value vastab mustrile
  8. some_value! ~/pattern/ - tõene, kui mõni_value ei ühti mustriga

Nüüd, kui oleme Awki erinevaid võrdlusoperaatoreid uurinud, mõistkem neid näite abil paremini.

Selles näites on meil fail nimega food_list.txt, mis on erinevate toiduainete ostunimekiri ja sooviksin märkida toidukaubad, mille kogus on väiksem või võrdne 20, lisades (**) iga rea lõpus.

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

Awkis võrdlusoperaatorite kasutamise üldine süntaks on järgmine:

# expression { actions; }

Eespool nimetatud eesmärgi saavutamiseks pean käivitama alloleva käsu:

# 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	**

Ülaltoodud näites juhtub kaks olulist asja:

  1. Esimene avaldis {action; } kombinatsioon, $3 <= 30 {printf “% s\t% s\n”, $0, ”**”; } prindib read, mille kogus on väiksem või võrdne 30, ja lisab iga rea lõppu (**). Koguse väärtusele pääseb juurde muutuja $3 abil.
  2. Teine avaldis {action; } kombinatsioon, $3> 30 {print $0;} prindib read muutmata kujul, kuna nende kogus on suurem kui 30.

Üks näide veel:

# 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

Selles näites tahame näidata ridu, mille kogus on väiksem või võrdne 20 ja mille lõpus on sõna (TRUE).

Kokkuvõte

See on sissejuhatav õpetus võrdlusoperaatoritele Awkis, seetõttu peate proovima palju muid võimalusi ja avastama rohkem.

Kui teil on probleeme või mingeid täiendusi, mida olete mõelnud, siis kukutage kommentaar allpool olevasse kommentaaride jaotisesse. Ärge unustage lugeda Awki sarja järgmist osa, kus juhatan teid liitväljendite kaudu.