Wéi benotzt Dir Awk fir Text oder Strings ze filteren mat Musterspezifesche Aktiounen


Am drëtten Deel vun der Awk Kommando-Serie wäerte mir e Bléck op d'Filteren vun Text oder Saiten op Basis vu spezifesche Mustere kucken, déi e Benotzer kann definéieren.

Heiansdo, wann Dir Text filtert, wëllt Dir bestëmmte Linnen aus enger Inputdatei oder Zeilen vu Saiten uginn op Basis vun enger bestëmmter Konditioun oder mat engem spezifesche Muster dat passend ka ginn. Dëst mat Awk ze maachen ass ganz einfach, et ass eng vun de super Features vun Awk déi Dir hëllefräich fannt.

Loosst eis e Beispill hei ënnendrënner kucken, sot Dir hutt eng Akafslëscht fir Liewensmëttel déi Dir wëllt kafen, genannt food_prices.list. Et huet déi folgend Lëscht vu Liewensmëttel an hir Präisser.

$ cat food_prices.list 
No	Item_Name		Quantity	Price
1	Mangoes			   10		$2.45
2	Apples			   20		$1.50
3	Bananas			   5		$0.90
4	Pineapples		   10		$3.46
5	Oranges			   10		$0.78
6	Tomatoes		   5		$0.55
7	Onions			   5            $0.45

An da wëllt Dir e (*) Zeechen op Liewensmëttelen unzeginn, deenen hire Präis méi grouss ass wéi $2, dëst kann gemaach ginn andeems Dir de folgende Kommando ausféiert:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

Vun der Ausgab uewendriwwer kënnt Dir gesinn datt et e (*) Zeechen um Enn vun den Zeilen ass mat Liewensmëttel, Mango an Ananas. Wann Dir hir Präisser iwwerpréift, si se iwwer $2.

An dësem Beispill hu mir zwee Mustere benotzt:

  1. déi éischt: / *\$[2-9]\.[0-9][0-9] */ kritt d'Zeilen déi Liewensmëttelpräis méi wéi $2 hunn an
  2. déi zweet: /*\$[0-1]\.[0-9][0-9] */ sicht Zeilen mat Liewensmëttelpräis manner wéi $2.
  3. >

Dëst ass wat geschitt, et gi véier Felder an der Datei, wann Muster een op eng Linn mat engem Liewensmëttelpräis méi wéi $2 begéint, dréckt se all déi véier Felder an e (*) Zeechen um Enn vun d'Linn als Fändel.

Déi zweet Muster dréckt einfach déi aner Zeilen mat Liewensmëttelpräis manner wéi $2 wéi se an der Inputdatei schéngen, food_prices.list.

Op dës Manéier kënnt Dir Musterspezifesch Aktiounen benotze fir Liewensmëttelartikelen auszefilteren déi iwwer $2 Präisser sinn, obwuel et e Problem mat der Ausgang ass, sinn d'Zeilen déi den (*) Zeechen net formatéiert wéi de Rescht vun de Linnen maachen d'Ausgab net kloer genuch.

Mir hunn dee selwechte Problem am Deel 2 vun der awk Serie gesinn, awer mir kënnen et op zwou Weeër léisen:

1. Benotzt printf Kommando wat e laangen a langweilege Wee ass mam Kommando hei drënner:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list 

2. Benotzt $0 Feld. Awk benotzt d'Variabel 0 fir déi ganz Input Linn ze späicheren. Dëst ass praktesch fir de Problem hei uewen ze léisen an et ass einfach a séier wéi follegt:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list 

Conclusioun

Dat ass et fir de Moment an dëst sinn einfach Weeër fir Text ze filteren mat Musterspezifesch Handlungen déi hëllefe kënnen Textlinnen oder Saiten an enger Datei mat Awk Kommando ze markéieren.

Hoffen Dir fannt dësen Artikel hëllefräich an erënnert Iech un den nächsten Deel vun der Serie ze liesen déi sech fokusséiert op d'Vergläichsbedreiwer ze benotzen déi awk Tool benotzen.