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:
>
- suurem kui-
<
- vähem kui -
> =
- suurem või võrdne -
<=
- väiksem või võrdne -
==
- võrdne -
! =
- pole võrdne -
some_value ~/pattern/
- tõene, kui mõni_value vastab mustrile -
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:
- 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.
- 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.