Giunsa Paggamit ang Awk sa Pagsala sa Teksto o Mga String Gamit ang Mga Piho nga Mga Aksyon sa Pattern


Sa ikatulo nga bahin sa serye sa Awk command, atong tan-awon ang pagsala sa teksto o mga kuwerdas base sa piho nga mga sumbanan nga mahimong ipasabut sa usa ka user.

Usahay, kung nagsala sa teksto, gusto nimo nga ipakita ang pipila ka mga linya gikan sa usa ka input file o mga linya sa mga kuwerdas base sa usa ka gihatag nga kondisyon o gamit ang usa ka piho nga sumbanan nga mahimong ipares. Ang pagbuhat niini sa Awk sayon ra kaayo, kini usa sa mga nindot nga bahin sa Awk nga imong makaplagan nga makatabang.

Atong tan-awon ang usa ka pananglitan sa ubos, ingnon ta nga ikaw adunay listahan sa pagpamalit alang sa mga pagkaon nga gusto nimong paliton, gitawag nga food_price.list. Kini adunay mosunod nga listahan sa mga pagkaon ug ang ilang mga presyo.

$ 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

Ug unya, gusto nimong ipakita ang usa ka (*) sign sa mga pagkaon nga ang presyo mas taas kaysa $2, mahimo kini pinaagi sa pagpadagan sa mosunod nga mando:

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

Gikan sa output sa ibabaw, imong makita nga ang adunay (*) sign sa katapusan sa mga linya nga adunay mga pagkaon, mangga ug pinya. Kung imong susihon ang ilang mga presyo, labaw sila sa $2.

Sa kini nga pananglitan, gigamit namon ang duha nga mga sumbanan:

  1. ang una: / *\$[2-9]\.[0-9][0-9] */ makakuha sa mga linya nga adunay presyo sa pagkaon nga labaw sa $2 ug
  2. ang ikaduha: /*\$[0-1]\.[0-9][0-9] */ nangitag linya nga adunay presyo sa pagkaon nga ubos sa $2.

Mao kini ang mahitabo, adunay upat ka mga field sa file, kung ang usa ka pattern makasugat sa usa ka linya nga adunay presyo sa pagkaon nga labaw sa $2, kini nag-imprinta sa tanan nga upat ka mga field ug usa ka (*) sign sa katapusan sa ang linya isip bandera.

Ang ikaduha nga sumbanan nag-imprinta lang sa ubang mga linya nga adunay presyo sa pagkaon nga ubos sa $2 samtang kini makita sa input file, food_price.list.

Niining paagiha magamit nimo ang piho nga mga aksyon sa pattern aron masala ang mga butang sa pagkaon nga nagpresyo labaw sa $2, bisan kung adunay problema sa output, ang mga linya nga adunay marka nga (*) wala giporma sama sa ang nahabilin sa mga linya nga naghimo sa output dili igo nga klaro.

Nakita namon ang parehas nga problema sa Bahin 2 sa serye sa awk, apan masulbad namon kini sa duha ka paagi:

1. Paggamit sa printf command nga usa ka taas ug boring nga paagi gamit ang command sa ubos:

$ 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. Gamit ang $0 nga field. Gigamit sa Awk ang variable 0 aron tipigan ang tibuok linya sa input. Kini magamit alang sa pagsulbad sa problema sa ibabaw ug kini yano ug paspas sama sa mosunod:

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

Konklusyon

Mao na kini sa karon ug kini ang mga yano nga paagi sa pagsala sa teksto gamit ang piho nga aksyon nga pattern nga makatabang sa pag-flag sa mga linya sa teksto o mga string sa usa ka file gamit ang Awk command.

Hinaot nga makatabang ka niining artikuloha ug hinumdomi nga basahon ang sunod nga bahin sa serye nga magtutok sa paggamit sa mga operator sa pagtandi gamit ang awk tool.