Mar a sgrìobhas tu àithnean agus sgrìobhainnean AWK

Òrdan, co-sgrìobhadh, agus eisimpleirean

Is e an t-òrdugh awk dòigh chumhachdach airson a bhith a 'làimhseachadh no a' dèanamh anailis air faidhlichean teacsa-gu sònraichte, faidhlichean dàta a tha air an eagrachadh le loidhnichean (sreathan) agus colbhan.

Faodar òrdughan sìmplidh sìmplidh a ruith bhon loidhne àithne . Bu chòir gnìomhan nas iom-fhillte a bhith air an sgrìobhadh mar phrògraman awk (mar a theirear awk scripts) gu faidhle.

Tha cruth bunaiteach òrdugh awk coltach ris an seo:

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

Tha seo a 'ciallachadh: gabh gach loidhne den fhaidhle ionchuir; ma tha an loidhne a 'toirt a-steach am pàtran, cuiridh an gnìomh ris an loidhne agus sgrìobh an loidhne mar thoradh air an fhaidhle toraidh. Ma tha am pàtran air fhàgail, tha an gnìomh air a chur gu gach loidhne. Mar eisimpleir:

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

Tha an aithris seo a 'toirt an eileamaid den 5mh colbh de gach loidhne agus tha e ga sgrìobhadh mar loidhne anns an fhaidhle toraidh "output.txt". Tha an caochladair '$ 4' a 'toirt iomradh air an dàrna colbh. Mar an ceudna, 's urrainn dhut faighinn a-steach don chiad, an dara agus an treas colbh, le $ 1, $ 2, $ 3, msaa. Thathas a' meas gu bheil colbhan bunaiteach air an sgaradh le àiteachan no tabaichean (mar a chanar ris an àite geal). Mar sin, ma tha na loidhnichean seo ann am faidhle "table1.txt" an ionaid:

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

An uairsin bhiodh an t-òrdugh a 'sgrìobhadh nan loidhnichean a leanas chun an fhaidhle toraidh "output1.txt":

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

Ma tha an sgaradh colbh rudeigin eile a bharrachd air àiteachan no tabaichean, mar cromag, faodaidh tu sin a shònrachadh anns an aithris uabhasach mar a leanas:

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

Tagh seo an eileamaid bho cholbh 3 de gach loidhne ma thathar a 'meas gu bheil na colbhan air an sgaradh le cromag. Mar sin, bhiodh an toradh, anns a 'chùis seo:

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

Is e bloc a chanar ris an liosta de na h-aithrisean a tha taobh a-staigh nan bracagan buairidh ('{', '}'). Ma chuireas tu facal cùmhaidh air beulaibh bloca, cha tèid an aithris taobh a-staigh a 'bhac a chur gu bàs ach a-mhàin ma tha an suidheachadh fìor.

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

Anns a 'chùis seo, is e $ 7 == "\ $ 7.30" a th' ann, a tha a 'ciallachadh gu bheil an eileamaid ann an colbh 7 co-ionann ri $ 7.30. Thathas a 'cleachdadh an t-samhradh air beulaibh comharradh an dolar gus casg a chuir air an t-siostam eadar eadar-mhìneachadh $ 7 mar chaochlaideach agus an àite a bhith a' toirt an comharra dollar gu litearra.

Mar sin tha an aithris uabhasach seo a 'briseadh a-mach an eileamaid aig an treas colbh de gach loidhne aig a bheil "$ 7.30" ann an colbh 7.

Faodaidh tu cuideachd abairtean cunbhalach a chleachdadh mar an staid. Mar eisimpleir:

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

Is e an sreang eadar an dà slashes ('/') an abairt àbhaisteach. Anns a 'chùis seo, is e dìreach an sreang "30." Tha seo a 'ciallachadh ma tha loidhne anns an sreang "30", bidh an siostam a' briseadh a-mach an eileamaid aig an treas colbh den loidhne sin. Is e an toradh san eisimpleir gu h-àrd:

Timberlake, Gaga, Presley,

Mas e na h-eileamaidean bùird, faodaidh àireamhan awk àireamhachadh a ruith orra mar anns an eisimpleir seo:

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

A bharrachd air na caochlaidhean a tha na h-eileamaidean ruigsinneachd den t-sreath a th 'ann an-dràsta ($ 1, $ 2, msaa.) Tha an caochladair $ 0 a tha a' toirt iomradh air an sreath iomlan (loidhne), agus an caochladh NF a tha a 'cumail ris an àireamh de raointean.

Faodaidh tu cuideachd atharrachaidhean ùra a mhìneachadh mar anns an eisimpleir seo:

awk '{sum = 0; airson (col = 1; col <= NF; col ++) sum + = $ col; prìs sum; } '

Bidh seo a 'dèanamh suas agus a' clò-bhualadh suim nan eileamaidean uile de gach sreath.

Tha aithrisean awk gu tric air an cur còmhla ri òrdughan sed .