Kif tuża Awk biex tiffiltra Test jew Strings billi tuża Azzjonijiet Speċifiċi tal-Mudelli


Fit-tielet parti tas-serje tal-kmand Awk, se nagħtu ħarsa lejn it-test tal-filtrazzjoni jew is-sekwenzi bbażati fuq mudelli speċifiċi li utent jista 'jiddefinixxi.

Xi drabi, meta tiffiltra test, trid tindika ċerti linji minn fajl ta 'input jew linji ta' kordi bbażati fuq kundizzjoni partikolari jew bl-użu ta 'mudell speċifiku li jista' jitqabbel. Li tagħmel dan b'Awk hija faċli ħafna, hija waħda mill-karatteristiċi kbar ta 'Awk li ssibu ta' għajnuna.

Ejja nagħtu ħarsa lejn eżempju hawn taħt, ngħidu li għandek lista tax-xiri għall-oġġetti tal-ikel li trid tixtri, imsejħa food_prices.list. Għandu l-lista li ġejja ta 'oġġetti tal-ikel u l-prezzijiet tagħhom.

$ 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

U mbagħad, trid tindika sinjal (*) fuq oġġetti tal-ikel li l-prezz tagħhom huwa akbar minn $2, dan jista 'jsir billi tħaddem il-kmand li ġej:

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

Mill-output ta 'hawn fuq, tista' tara li hemm sinjal (*) fl-aħħar tal-linji li għandhom oġġetti tal-ikel, mango u ananas. Jekk tiċċekkja l-prezzijiet tagħhom, huma ogħla minn $2.

F'dan l-eżempju, użajna żewġ mudelli:

  1. l-ewwel: / *\$[2-9]\.[0-9][0-9] */ jikseb il-linji li għandhom prezz tal-oġġett tal-ikel akbar minn $2 u li>
  2. it-tieni: /*\$[0-1]\.[0-9][0-9] */ tfittex linji bi prezz tal-oġġett tal-ikel inqas minn $2.
  3. >

Dan huwa dak li jiġri, hemm erba’ oqsma fil-fajl, meta l-mudell wieħed jiltaqa’ ma’ linja bi prezz tal-oġġett tal-ikel akbar minn $2, jistampa l-erba’ oqsma kollha u sinjal (*) fl-aħħar ta’ il-linja bħala bandiera.

It-tieni mudell sempliċement jistampa l-linji l-oħra bi prezz tal-ikel inqas minn $2 kif jidhru fil-fajl tal-input, food_prices.list.

B'dan il-mod tista' tuża azzjonijiet speċifiċi għall-mudell biex tiffiltra oġġetti tal-ikel li huma pprezzati 'l fuq minn $2, għalkemm hemm problema bl-output, il-linji li għandhom is-sinjal (*) mhumiex ifformattjati bħall- bqija tal-linji li jagħmlu l-output mhux ċar biżżejjed.

Rajna l-istess problema fil-Parti 2 tas-serje awk, iżda nistgħu nsolvuha b'żewġ modi:

1. Bl-użu tal-kmand printf li huwa mod twil u boring bl-użu tal-kmand hawn taħt:

$ 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. Bl-użu $0 qasam. Awk juża l-varjabbli 0 biex jaħżen il-linja tad-dħul kollha. Dan huwa utli biex issolvi l-problema ta 'hawn fuq u huwa sempliċi u veloċi kif ġej:

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

Konklużjoni

Dak hu għalissa u dawn huma modi sempliċi kif jiġi ffiltrat it-test bl-użu ta 'azzjoni speċifika għall-mudell li jistgħu jgħinu fl-immarkar ta' linji ta 'test jew kordi f'fajl bl-użu ta' kmand Awk.

Nittama li ssib dan l-artikolu ta 'għajnuna u ftakar li taqra l-parti li jmiss tas-serje li se tiffoka fuq l-użu ta' operaturi ta 'tqabbil bl-użu tal-għodda awk.