Jinsi ya Kutumia Awk Kuchuja Maandishi au Mifuatano Kwa Kutumia Vitendo Maalum vya Muundo


Katika sehemu ya tatu ya mfululizo wa amri ya Awk, tutaangalia kuchuja maandishi au mifuatano kulingana na mifumo maalum ambayo mtumiaji anaweza kufafanua.

Wakati mwingine, unapochuja maandishi, unataka kuonyesha mistari fulani kutoka kwa faili ya ingizo au mistari ya mifuatano kulingana na hali fulani au kutumia mchoro maalum unaoweza kulinganishwa. Kufanya hivi ukitumia Awk ni rahisi sana, ni moja wapo ya sifa kuu za Awk ambazo utapata kusaidia.

Hebu tuangalie mfano hapa chini, tuseme una orodha ya ununuzi wa vyakula unavyotaka kununua, inayoitwa food_prices.list. Inayo orodha ifuatayo ya bidhaa za chakula na bei zao.

$ 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

Kisha, ungependa kuashiria alama ya (*) kwenye vyakula ambavyo bei yake ni kubwa kuliko $2, hili linaweza kufanywa kwa kutekeleza amri ifuatayo:

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

Kutoka kwa matokeo hapo juu, unaweza kuona kwamba kuna alama ya (*) mwishoni mwa mistari iliyo na vyakula, maembe na mananasi. Ukiangalia bei zao, ni zaidi ya $2.

Katika mfano huu, tumetumia mifumo miwili:

  1. ya kwanza: / *\$[2-9]\.[0-9][0-9] */ hupata laini ambazo zina bei ya bidhaa ya chakula zaidi ya $2 na li>
  2. ya pili: /*\$[0-1]\.[0-9][0-9] */ inatafuta laini zenye bei ya bidhaa za chakula chini ya $2.

Hiki ndicho kinachotokea, kuna sehemu nne kwenye faili, muundo wa kwanza unapokutana na mstari wenye bei ya bidhaa ya chakula kubwa kuliko $2, huchapisha sehemu zote nne na alama ya (*) mwishoni mwa mstari kama bendera.

Mchoro wa pili huchapisha tu mistari mingine na bei ya chakula chini ya $2 kama inavyoonekana katika faili ya ingizo, food_prices.list.

Kwa njia hii unaweza kutumia muundo maalum wa vitendo kuchuja bidhaa za chakula ambazo bei yake ni zaidi ya $2, ingawa kuna tatizo na matokeo, mistari iliyo na alama ya (*) haijaumbizwa kama mistari mingine ikifanya pato kutokuwa wazi vya kutosha.

Tuliona shida sawa katika Sehemu ya 2 ya safu ya awk, lakini tunaweza kuisuluhisha kwa njia mbili:

1. Kutumia printf amri ambayo ni njia ndefu na ya kuchosha kwa kutumia amri iliyo hapa chini:

$ 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. Kutumia sehemu ya $0. Awk hutumia kutofautisha 0 kuhifadhi safu nzima ya ingizo. Hii ni rahisi kwa kutatua shida hapo juu na ni rahisi na haraka kama ifuatavyo.

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

Hitimisho

Ndivyo ilivyo kwa sasa na hizi ni njia rahisi za kuchuja maandishi kwa kutumia kitendo maalum cha muundo ambacho kinaweza kusaidia katika kuripoti mistari ya maandishi au mifuatano kwenye faili kwa kutumia amri ya Awk.

Natumai utapata nakala hii kuwa ya msaada na ukumbuke kusoma sehemu inayofuata ya safu ambayo itazingatia kutumia waendeshaji kulinganisha kwa kutumia zana ya awk.