Awkin käyttäminen tekstin tai merkkijonojen suodattamiseen käyttämällä kuviokohtaisia toimintoja


Awk-komentosarjan kolmannessa osassa tarkastellaan tekstin tai merkkijonojen suodattamista tiettyjen käyttäjän määrittelemien mallien perusteella.

Joskus tekstiä suodatettaessa halutaan osoittaa tietyt rivit syöttötiedostosta tai merkkijonorivejä tietyn ehdon perusteella tai käyttämällä tiettyä mallia, joka voidaan sovittaa. Tämän tekeminen Awkin avulla on erittäin helppoa, ja se on yksi Awkin hienoista ominaisuuksista, joista on sinulle hyötyä.

Tarkastellaanpa alla olevaa esimerkkiä. Oletetaan, että sinulla on ostoslista elintarvikkeista, joita haluat ostaa, nimeltä food_prices.list. Siinä on seuraava luettelo elintarvikkeista ja niiden hinnoista.

$ 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

Ja sitten haluat merkitä (*)-merkin elintarvikkeisiin, joiden hinta on suurempi kuin $2. Tämä voidaan tehdä suorittamalla seuraava komento:

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

Yllä olevasta tulosteesta näet, että rivien lopussa on (*)-merkki, jossa on elintarvikkeita, mangoja ja ananasta. >. Jos tarkistat niiden hinnat, ne ovat yli 2 dollaria.

Tässä esimerkissä olemme käyttäneet kahta mallia:

  1. ensimmäinen: / *\$[2-9]\.[0-9][0-9] */ saa rivit, joiden elintarvikkeiden hinta on suurempi kuin 2 $ > ja
  2. toinen: /*\$[0-1]\.[0-9][0-9] */ etsii rivejä, joiden elintarvikkeiden hinta on alle 2 dollaria .

Näin tapahtuu, tiedostossa on neljä kenttää. Kun kuvio yksi kohtaa rivin, jonka ruokatuotteen hinta on suurempi kuin $2, se tulostaa kaikki neljä kenttää ja (*). koodi> merkki rivin lopussa lippuna.

Toinen kuvio yksinkertaisesti tulostaa muut rivit, joiden ruoan hinta on alle 2 dollaria, sellaisina kuin ne näkyvät syöttötiedostossa food_prices.list.

Tällä tavalla voit käyttää kuviokohtaisia toimintoja suodattaaksesi pois ruoat, joiden hinta on yli 2 dollaria, vaikka tulostuksessa on ongelma, rivit, joilla on (*). merkkiä ei ole muotoiltu kuten muut rivit, joten tulos ei ole tarpeeksi selkeä.

Näimme saman ongelman awk-sarjan osassa 2, mutta voimme ratkaista sen kahdella tavalla:

1. printf-komennon käyttäminen, joka on pitkä ja tylsä tapa käyttää alla olevaa komentoa:

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. $0-kentän käyttäminen. Awk käyttää muuttujaa 0 koko syöttörivin tallentamiseen. Tämä on kätevä yllä olevan ongelman ratkaisemiseksi, ja se on yksinkertainen ja nopea seuraavasti:

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

Johtopäätös

Siinä se toistaiseksi, ja nämä ovat yksinkertaisia tapoja suodattaa tekstiä kuviokohtaisilla toimilla, jotka voivat auttaa merkitsemään tiedoston tekstirivejä tai merkkijonoja Awk-komennolla.

Toivottavasti tämä artikkeli on hyödyllinen ja muista lukea sarjan seuraava osa, joka keskittyy vertailuoperaattoreiden käyttöön awk-työkalun avulla.