Kaip naudoti palyginimo operatorius su Awk sistemoje Linux – 4 dalis


Nagrinėjant skaitines arba eilučių reikšmes teksto eilutėje, teksto ar eilučių filtravimas naudojant palyginimo operatorius yra naudingas komandos Awk naudotojams.

Šioje „Awk“ serijos dalyje apžvelgsime, kaip galite filtruoti tekstą ar eilutes naudodami palyginimo operatorius. Jei esate programuotojas, jūs jau turite būti susipažinę su palyginimo operatoriais, bet tie, kurie to dar nežino, leiskite paaiškinti toliau pateiktame skyriuje.

Kas yra „Awk“ palyginimo operatoriai?

Awk palyginimo operatoriai yra naudojami skaičių ar eilučių vertei palyginti ir jie apima:

  1. > – didesnis nei
  2. < – mažiau nei
  3. >= – didesnis arba lygus
  4. <= – mažesnis arba lygus
  5. == – lygus
  6. != – nelygu
  7. some_value ~/modelis/ – tiesa, jei kai kurios_vertės atitinka šabloną
  8. some_value !~/pattern/ – tiesa, jei tam tikra_vertė neatitinka šablono

Dabar, kai pažvelgėme į įvairius Awk palyginimo operatorius, leiskite mums geriau suprasti juos naudodami pavyzdį.

Šiame pavyzdyje turime failą pavadinimu maisto_sąrašas.txt, kuris yra įvairių maisto produktų pirkinių sąrašas. Norėčiau pažymėti maisto produktus, kurių kiekis yra mažesnis arba lygus 20, pridėdamas ( **) kiekvienos eilutės pabaigoje.

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

Bendra palyginimo operatorių naudojimo Awk sintaksė yra tokia:

expression { actions; }

Norėdami pasiekti aukščiau nurodytą tikslą, turėsiu paleisti toliau pateiktą komandą:

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

Aukščiau pateiktame pavyzdyje atsitinka du svarbūs dalykai:

  1. Pirmoji išraiška { action ; } derinys, 3 USD <= 30 { printf “%s\t%s\n”, $0,”**” ; } išspausdina eilutes, kurių kiekis mažesnis arba lygus 30, ir kiekvienos eilutės pabaigoje prideda (**). Kiekio vertė pasiekiama naudojant $3 lauko kintamąjį.
  2. Antroji išraiška { action ; } derinys, 3 USD > 30 { print $0 ;} spausdina nepakitusias eilutes, nes jų kiekis yra didesnis nei 30.

Dar vienas pavyzdys:

# 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

Šiame pavyzdyje norime nurodyti eilutes, kurių kiekis yra mažesnis arba lygus 20, kurių pabaigoje yra žodis (TRUE).

Santrauka

Tai įvadinė pamoka apie palyginimo operatorius Awk, todėl turite išbandyti daugybę kitų parinkčių ir atrasti daugiau.

Jei turite kokių nors problemų ar turite kokių nors papildymų, palikite komentarą toliau pateiktame komentarų skyriuje. Nepamirškite perskaityti kitos Awk serijos dalies, kurioje paaiškinsiu sudėtines išraiškas.