Kif Ikteb Kompiti u Skripts AWK

Kmandijiet, sintassi u eżempji

Il-kmand awk huwa metodu qawwi għall-ipproċessar jew l-analiżi ta 'fajls tat-test - b'mod partikolari, fajls tad-data li huma organizzati minn linji (ringieli) u kolonni.

Il-kmandi awk sempliċi jistgħu jitmexxew mil- linja tal - kmand . Kompiti aktar kumplessi għandhom jinkitbu bħala programmi awk (l-hekk imsejħa skripts awk) għal fajl.

Il-format bażiku ta 'kmand awk jidher bħal dan:

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

Dan ifisser: tieħu kull linja tal-fajl tad-dħul; jekk il-linja jkun fiha l-mudell tapplika l-azzjoni għall-linja u tikteb il-linja li tirriżulta fil-fajl tal-output. Jekk il-mudell jitħalla barra, l-azzjoni hija applikata għal-linja kollha. Pereżempju:

awk "{print $ 5}" tabella1.txt> output1.txt

Din id-dikjarazzjoni tieħu l-element tal-ħames kolonna ta 'kull linja u tiktebha bħala linja fil-fajl tal-output "output.txt". Il-varjabbli "$ 4" tirreferi għat-tieni kolonna. Bl-istess mod tista 'taċċessa l-ewwel, it-tieni u t-tielet kolonna, b' $ 1, $ 2, $ 3, eċċ. Minn kolonni default suppost ikunu separati minn spazji jew tabs (hekk imsejħa spazju abjad). Għalhekk, jekk il-fajl tad-dħul "table1.txt" fih dawn il-linji:

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

Imbagħad il-kmand jikteb il-linji li ġejjin fil-fajl tal-output "output1.txt":

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

Jekk is-separatur tal-kolonna hija xi ħaġa oħra għajr spazji jew tabs, bħalma hu virgola, tista 'tispeċifika li fid-dikjarazzjoni awk kif ġej:

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

Dan jagħżel l-element mill-kolonna 3 ta 'kull linja jekk il-kolonni jitqiesu li huma separati b'virgola. Għalhekk il-produzzjoni, f'dan il-każ, tkun:

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

Il-lista ta 'dikjarazzjonijiet ġewwa l-parentesi tal-kaboċċi (' {','} ') tissejjaħ blokk. Jekk tpoġġi espressjoni kondizzjonata quddiem blokk, id-dikjarazzjoni ġewwa l-blokk tkun eżegwita biss jekk il-kondizzjoni hi vera.

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

F'dan il-każ, il-kundizzjoni hija ta '$ 7 == "\ $ 7.30", li jfisser li l-element fil-kolonna 7 huwa ugwali għal $ 7.30. Il-backslash quddiem is-sinjal tad-dollaru huwa użat biex jipprevjeni lis-sistema milli tinterpreta $ 7 bħala varjabbli u minflok tieħu s-sinjal ta 'dollari litteralment.

Allura din l-istqarrija awk timpressjona l-element fit-tielet kolonna ta 'kull linja li għandha "$ 7.30" fil-kolonna 7.

Tista 'wkoll tuża espressjonijiet regolari bħala l-kundizzjoni. Pereżempju:

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

Is-sekwenza bejn iż-żewġ linji ta 'barra (' / ') hija l-espressjoni regolari. F'dan il-każ, huwa biss is-sekwenza "30." Dan ifisser li jekk linja jkun fiha s-sekwenza "30", is-sistema tesprimi l-element fit-tielet kolonna ta 'dik il-linja. Ir-riżultat fl-eżempju ta 'hawn fuq ikun:

Timberlake, Gaga, Presley,

Jekk l-elementi tal-mejda huma n-numri awk tista 'taħdem kalkoli fuqhom bħal f'dan l-eżempju:

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

Minbarra l-varjabbli li l-elementi ta 'aċċess tar-ringiela kurrenti ($ 1, $ 2, eċċ) hemm il-varjabbli $ 0 li tirreferi għar-ringiela sħiħa (linja), u l-varjabbli NF li żżomm in-numru ta'

Tista 'wkoll tiddefinixxi varjabbli ġodda bħal f'dan l-eżempju:

awk '{sum = 0; għal (col = 1; col <= NF; col ++) somma + = $ col; somma stampata; } "

Dan jikkalkula u jimpjega s-somma tal-elementi kollha ta 'kull ringiela.

Id-dikjarazzjonijiet awk ta 'spiss huma kkombinati ma' kmandijiet sodi .