Unsaon Pagsulat ang AWK nga Mga Sugo ug mga Script

Mga sugo, syntax, ug mga ehemplo

Ang awk nga sugo usa ka gamhanan nga pamaagi alang sa pagproseso o pag-analisar sa mga file sa teksto-sa partikular, mga file sa datos nga gi-organisa sa mga linya (mga linya) ug mga kolum.

Ang yano nga awk commands mahimong modagan gikan sa command line . Ang mas komplikado nga mga buluhaton kinahanglan isulat ingon nga awk programs (gitawag nga awk scripts) sa usa ka file.

Ang sukaranan nga format sa awk nga komand nga susama niini:

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

Kini nagpasabot nga: kuhaa ang matag linya sa input file; kung ang linya naglangkob sa sumbanan magamit ang aksyon sa linya ug isulat ang resulta nga linya ngadto sa output-file. Kung ang sumbanan wala mahibal-an, ang aksyon gigamit sa tanan nga linya. Pananglitan:

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

Kini nga pahayag nagkinahanglan sa elemento sa ika-5 nga kolum sa matag linya ug gisulat kini isip linya sa output file "output.txt". Ang variable '$ 4' nagtumong sa ikaduhang kolum. Sa susama mahimo nimo ma-access ang una, ikaduha, ug ikatulo nga kolum, nga adunay $ 1, $ 2, $ 3, ug uban pa. Pinaagi sa default nga mga kolum gituohan nga gibulag pinaagi sa mga espasyo o mga tab (gitawag nga puting luna). Busa, kung ang input file nga "table1.txt" naglangkob niining mga linya:

1, Justin Timberlake, Titulo 545, Presyo $ 7.30 2, Taylor Swift, Titulo 723, Presyo $ 7.90 3, Mick Jagger, Titulo 610, Presyo $ 7.90 4, Lady Gaga, Titulo 118, Presyo $ 7.30 5, Johnny Cash, Title 482, Presyo $ 6.50 6, Elvis Presley, Titulo 335, Presyo $ 7.30 7, John Lennon, Titulo 271, Presyo $ 7.90 8, Michael Jackson, Titulo 373, Presyo $ 5.50

Unya ang sugo magsulat sa mosunod nga mga linya sa output file "output1.txt":

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

Kung ang column separator usa ka butang gawas sa mga espasyo o mga tab, sama sa usa ka comma, mahimo nimong itakda nga sa awk nga pahayag ingon sa mosunod:

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

Kini mopili sa elemento gikan sa kolum 3 sa matag linya kon ang mga kolum giisip nga gibulag sa usa ka koma. Busa ang output, niining kasoha, mao:

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

Ang lista sa mga pahayag sa sulod sa mga curly brackets ('{', '}') gitawag nga usa ka block. Kon magbutang ka og conditional expression sa atubangan sa usa ka block, ang pahayag sulod sa block ipatuman lamang kon ang kahimtang tinuod.

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

Sa kini nga kaso, ang kahimtang mao ang $ 7 == "\ $ 7.30", nga nagpasabot nga ang elemento sa kolum 7 katumbas sa $ 7.30. Ang backslash sa atubangan sa dolyar nga ilhanan gigamit aron mapugngan ang sistema sa paghubad sa $ 7 isip usa ka variable ug hinoon mokuha sa dolyar nga simbolo nga literal.

Busa kini nga pahayag nagpatik sa elemento sa ikatulong kolum sa matag linya nga adunay "$ 7.30" sa kolum 7.

Mahimo usab nimo gamiton ang regular nga mga ekspresyon isip kondisyon. Pananglitan:

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

Ang tali tali sa duha ka slashes ('/') mao ang regular nga ekspresyon. Sa kini nga kaso, kini ang hugpong nga "30." Kini nagpasabot kung ang usa ka linya naglangkob sa hugpong "30", ang sistema nagpatik sa elemento sa ikatulong kolum sa linya nga niana. Ang sangputanan sa pananglitan sa ibabaw mahimong:

Si Timberlake, Gaga, Presley,

Kung ang mga elemento sa lamesa ang mga numero awk nga makadumala sa mga pagkalkulo sa kanila sama sa niini nga pananglitan:

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

Gawas sa mga variables nga maka-access sa mga elemento sa kasamtangan nga laray ($ 1, $ 2, ug uban pa) adunay variable $ 0 nga nagtumong sa kompleto nga linya (linya), ug ang variable NF nga naghupot sa gidaghanon sa mga natad.

Mahimo usab nimo ipasabut ang bag-ong mga kapilian sama niini nga pananglitan:

awk '{sum = 0; kay (col = 1; col <= NF; col ++) sum + = $ col; pag-imprinta; } '

Kini nagkompirma ug nag-imprinta sa gidaghanon sa tanan nga mga elemento sa matag laray.

Ang mga pahayag sa Awk kanunay gihiusa sa sed commands .