Si të shkruani komandat AWK dhe skriptet

Komandat, sintaksë dhe shembuj

Komanda awk është një metodë e fuqishme për përpunimin ose analizimin e skedarëve të tekstit - në veçanti, skedarët e të dhënave që janë të organizuara nga rreshta dhe kolona.

Komandat e thjeshta awk mund të drejtohen nga rreshti i komandës . Detyra më komplekse duhet të shkruhen si programe awk (të ashtuquajturat skripte awk) në një skedar.

Formati bazë i një komande awk duket kështu:

awk 'model {veprim}' input-file> output-file

Kjo do të thotë: merr çdo rresht të skedarit të futjes; nëse vija përmban modelin aplikoni veprimin në linjë dhe shkruani vijën që rezulton në skedarin e prodhimit. Nëse modeli është lënë jashtë, veprimi zbatohet në të gjithë linjën. Për shembull:

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

Kjo deklaratë merr elementin e kolonës së 5-të të secilës rresht dhe e shkruan atë si një rresht në skedarin e prodhimit "output.txt". Variabli '$ 4' i referohet kolonës së dytë. Në mënyrë të ngjashme mund të hyni në kolonën e parë, të dytë dhe të tretë, me $ 1, $ 2, $ 3, etj. Nga kolonat e paracaktuara supozohet të ndahen nga hapësira ose skeda (të ashtuquajtura hapësirë ​​të bardhë). Pra, nëse skedari i hyrjes "table1.txt" përmban këto rreshta:

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

Pastaj komanda do të shkruante linjat e mëposhtme në skedarin e prodhimit "output1.txt":

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

Nëse ndarësi i kolonës është diçka tjetër përveç hapësirave ose skedave, siç është një presje, mund të specifikoni në deklaratën awk si më poshtë:

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

Kjo do të përzgjedh elementin nga kolona 3 e secilës rresht nëse kolonat konsiderohet të ndahen me presje. Prandaj prodhimi, në këtë rast, do të ishte:

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

Lista e deklaratave brenda kllapave të lakuara ('{', '}') quhet bllok. Nëse vendosni një shprehje të kushtëzuar përpara një blloku, deklarata brenda bllokut do të ekzekutohet vetëm nëse gjendja është e vërtetë.

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

Në këtë rast, gjendja është $ 7 == "\ $ 7.30", që do të thotë se elementi në kolonën 7 është e barabartë me $ 7.30. Kundërshtari para shenjën e dollarit përdoret për të parandaluar që sistemi të interpretojë $ 7 si një ndryshore dhe në vend të kësaj të marrë shenjën e dollarit fjalë për fjalë.

Pra, kjo deklaratë awk printon elementin në kolonën 3 të secilës rresht që ka një "$ 7.30" në kolonën 7.

Ju gjithashtu mund të përdorni shprehje të rregullta si kusht. Për shembull:

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

Vargu midis dy prerjeve ('/') është shprehja e rregullt. Në këtë rast, është vetëm vargu "30." Kjo do të thotë nëse një linjë përmban vargun "30", sistemi printon elementin në kolonën e tretë të asaj rreshti. Prodhimi në shembullin e mësipërm do të ishte:

Timberlake, Gaga, Presley,

Nëse elementët e tabelës janë numra awk mund të bëjnë llogaritjet e tyre si në këtë shembull:

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

Përveç variablave që hyjnë në elementët e rreshtit aktual ($ 1, $ 2, etj.) Ekziston variabli $ 0 i cili i referohet rreshtit të plotë (rreshtit) dhe variablit NF i cili mban numrin e fushave.

Ju gjithashtu mund të përcaktoni variablat e rinj si në këtë shembull:

awk '{sum = 0; për (col = 1; col <= NF; col + + sum + = $ col; shuma e shtypur; } '

Kjo llogarit dhe shtyp shumën e të gjitha elementeve të çdo rreshti.

Deklaratat Awk janë shpesh të kombinuara me komandat sed .