Ki jan yo Ekri AWK Kòmand ak Scripts

Kòmand, sentaks, ak egzanp

Kòmandman an awk se yon metòd pwisan pou trete oswa analize tèks dosye-an patikilye, dosye done ki òganize pa liy (ranje) ak kolòn.

Senp lòd awk ka kouri soti nan liy lan lòd . Travay pi konplèks yo ta dwe ekri kòm awk pwogram (sa yo rele Awk Scripts) nan yon dosye.

Fòma debaz la nan yon lòd awk sanble sa a:

Awk 'modèl {aksyon}' opinyon-dosye> pwodiksyon-dosye

Sa vle di: pran chak liy nan dosye a opinyon; si liy lan gen modèl la aplike aksyon an nan liy lan epi ekri liy lan ki kapab lakòz nan pwodiksyon-dosye a. Si modèl la disparèt, aksyon an aplike nan tout liy. Pa egzanp:

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

Deklarasyon sa a pran eleman nan kolòn nan 5th nan chak liy epi li ekri li kòm yon liy nan pwodiksyon "output.txt" dosye a. '4 $ varyab' vle di dezyèm kolòn lan. Menm jan an tou ou ka jwenn aksè nan premye, dezyèm lan, ak twazyèm kolòn, ak $ 1, $ 2, $ 3, elatriye. Pa kolòn default yo sipoze yo dwe separe pa espas oswa onglè (sa yo rele espas blan). Se konsa, si dosye a opinyon "table1.txt" gen liy sa yo:

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

Lè sa a, lòd la ta ekri liy sa yo nan dosye pwodiksyon "output1.txt la":

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

Si separator nan kolòn se yon lòt bagay pase espas oswa onglè, tankou yon vigil, ou ka presize ke nan deklarasyon awk la jan sa a:

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

Sa a pral chwazi eleman ki soti nan kolòn 3 nan chak liy si kolòn yo yo konsidere yo dwe separe pa yon vigil. Se poutèt sa pwodiksyon an, nan ka sa a, ta dwe:

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

Lis deklarasyon andedan parantèz yo Curly ('{', '}') rele yon blòk. Si ou mete yon ekspresyon kondisyonèl devan yon blòk, deklarasyon an andedan blòk la pral egzekite sèlman si kondisyon an se verite.

awk '$ 7 == "$ 7,30" {enprime $ 3}' table1.txt

Nan ka sa a, kondisyon an se $ 7 == "$ 7.30", ki vle di ke eleman nan kolòn 7 egal a $ 7.30. Se backslash la devan siy dola a itilize yo anpeche sistèm lan soti nan entèprete $ 7 kòm yon varyab ak olye pran siy dola a literalman.

Se konsa, sa a deklarasyon awk simagri eleman nan kolòn nan 3yèm nan chak liy ki gen yon "$ 7.30" nan kolòn 7.

Ou kapab tou itilize ekspresyon regilye kòm kondisyon an. Pa egzanp:

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

Fòs ki genyen ant de sab yo ('/') se ekspresyon regilye a. Nan ka sa a, li se jis fisèl la "30." Sa vle di si yon liy gen fisèl la "30", sistèm la simagri eleman nan kolòn nan 3yèm nan liy sa a. Pwodiksyon an nan egzanp ki anwo a ta dwe:

Timberlake, Gaga, Presley,

Si eleman tab yo se nimewo awk ka kouri kalkil sou yo tankou nan egzanp sa a:

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

Anplis varyab yo ke eleman aksè nan ranje aktyèl la ($ 1, $ 2, elatriye), gen varyab $ 0 ki refere a liy ranje a nèt, ak NF la varyab ki kenbe nan kantite jaden.

Ou ka defini varyab nouvo tankou nan egzanp sa a:

awk '{sòm = 0; pou (col = 1; col <= NF; col ++) sòm + = $ col; sòm ekri an lèt detache; } '

Sa a kalkile ak simagri sòm total la nan tout eleman ki nan chak ranje.

Awk deklarasyon yo souvan konbine avèk kòmandman sed yo .