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:
>
– suurempi kuin<
– vähemmän kuin>=
– suurempi tai yhtä suuri kuin<=
– pienempi tai yhtä suuri kuin==
– yhtä suuri kuin!=
– ei yhtä suuri kuinjoku_arvo ~/kuvio/
– tosi, jos jokin_arvo vastaa kuviotajoku_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:
- 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.
- 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.