Nola idatzi AWKren aginduak eta gidoiak

Komandoak, sintaxia eta adibideak

Awk komandoa testu-fitxategiak prozesatzeko edo aztertzeko metodo indartsua da, bereziki, lerro (errenkadak) eta zutabeek antolatzen dituzten datu fitxategiak.

Simple awk komandoak komando lerroan exekutatu daitezke. Zeregin konplexuagoak awk programak (esate baterako awk scriptak) gisa idatzi behar dira fitxategi batera.

Awk komandoaren oinarrizko formatua honako hau da:

awk 'pattern {action}' input-file> output-file

Honek esan nahi du: sarrera-lerro bakoitzaren lerroa hartu; Lerroa eredua badu, lerroa ekintza aplikatu eta irteera-fitxategiarekin lerroa idazten du. Eredua ez bada betetzen, ekintza lerro guztiei aplikatuko zaie. Adibidez:

awk '{print $ 5}' table1.txt> output1.txt

Adierazpen honek lerro bakoitzeko 5. zutabearen elementua hartzen du eta "output.txt" irteerako fitxategian lerro gisa idazten du. '$ 4' aldagaiak bigarren zutabeari dagokio. Era berean, lehenengo, bigarren eta hirugarren zutabeetara sar zaitezke, $ 1, $ 2, $ 3, etab. Lehenetsitako zutabeak espazioen edo fitxen arabera bereizten dira (espazio zuria deitzen dena). Beraz, "table1.txt" sarrera fitxategiak lerro hauek ditu:

1, Justin Timberlake, Título 545, Precio 7,30 $ 2, Taylor Swift, Título 723, Precio 7,90 $ 3, Mick Jagger, Título 610, Precio 7,90 $ 4, Lady Gaga, Título 118, Precio $ 7,30 5, Johnny Cash, Título 482, Precio $ 6,50 6, Elvis Presley, Izenburua 335, Prezioa 7,30 $ 7, John Lennon, Izenburua 271, Prezioa 7,90 $ 8, Michael Jackson, 373 titulua, Prezioa 5,50 $

Ondoren, komandoa lerro hauek idazten ditu irteerako fitxategian "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

Zutabe bereizlea espazio edo fitxetan baino zerbait gehiago baldin bada, hala nola koma bat bezala, honakoa adieraz dezakezu awk adierazpenean:

awk -F, '{print $ 3}' table1.txt> output1.txt

Hau lerro bakoitzeko 3 zutabeko elementua hautatuko da zutabeak koma batekin bereizten badira. Beraz, irteera, kasu honetan, hau izango litzateke:

Izenburua 545 Título 723 Título 610 Título 118 Título 482 Título 335 Título 271 Título 373

Parentesi artean ('{', '}') barruan dauden adierazpenen zerrenda bloke bat da. Baldintzapeko adierazpena bloke baten aurrean jarri baduzu, blokearen barruan adierazpena baldintza egiazkoa bada exekutatuko da.

awk '$ 7 == "\ $ 7.30" {print $ 3} "taula1.txt

Kasu honetan, baldintza $ 7 == "\ $ 7.30" da, eta horrek esan nahi du 7 zutabeko elementua $ 7.30-koa dela. Diruaren zeinuaren aurreko ataleko barra erabiltzen da sistemak $ 7 aldagai gisa aldatzeko eta, horren ordez, dolarraren ikurra literalki hartu.

Beraz, awk adierazpen honek "7. 7" 7. zutabean dituen lerro bakoitzeko 3. zutabean inprimatzen du.

Era berean, adierazpen erregularrak ere erabil ditzakezu. Adibidez:

awk '/ 30 / {print $ 3}' table1.txt

Bi barraren arteko katea ('/') adierazpen erregularra da. Kasu honetan, "30." katea besterik ez da. Horrek esan nahi du lerro batek "30" katea badu, sistemak lerro horren 3. zutabean elementua inprimatzen du. Goiko adibidean irteera hau izango litzateke:

Timberlake, Gaga, Presley,

Mahaiaren elementuak zenbakiak dira awk-k kalkulu horiek exekutatzeko, adibide honetan bezala:

awk '{print ($ 2 * $ 3) + $ 7}'

Uneko errenkadako ($ 1, $ 2, eta abar) sarbide-elementuetan sartzen diren aldagaiez gain, $ 0 errenkada osoa (lerroa) eta NF eremu aldakorra den aldagaiaren aldagaia da.

Aldagai berriak ere defini ditzakezu adibide honetan:

awk '{sum = 0; (col = 1; col <= NF; col ++) sum + = $ col; inprimatu batura; } '

Errenkada bakoitzean elementu guztien batuketa kalkulatzen eta inprimatzen du.

Awk adierazpenak sarritan konbinatu komandoekin konbinatzen dira.