Jinsi ya Kuandika Maagizo ya AWK na Scripts

Maagizo, syntax, na mifano

Amri ya awk ni njia yenye nguvu ya usindikaji au kuchambua faili za maandishi-hasa, faili za data zilizoandaliwa na mistari (safu) na safu.

Amri rahisi za awk zinaweza kukimbia kutoka kwenye mstari wa amri . Kazi ngumu zaidi zinapaswa kuandikwa kama mipango ya awk (kinachoitwa awk scripts) kwenye faili.

Fomu ya msingi ya amri ya awk inaonekana kama hii:

muundo wa awk '{action}' pembejeo-faili> pato-faili

Hii ina maana: kuchukua kila mstari wa faili ya pembejeo; ikiwa mstari una muundo unatumia hatua kwenye mstari na uandike mstari unaofuata kwa faili ya pato. Ikiwa muundo hauondolewa, hatua hii inatumika kwenye mstari wote. Kwa mfano:

Awk '{kuchapisha $ 5}' table1.txt> output1.txt

Maneno haya inachukua kipengele cha safu ya 5 ya kila mstari na kuandika kama mstari katika faili ya pato "output.txt". Tofauti '$ 4' inahusu safu ya pili. Vile vile unaweza kufikia safu ya kwanza, ya pili, na ya tatu, na $ 1, $ 2, $ 3, nk. Kwa nguzo za msingi zinadhaniwa kutengwa na nafasi au tabo (inayoitwa nafasi nyeupe). Kwa hivyo, ikiwa faili ya pembejeo "table1.txt" ina mistari hii:

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

Kisha amri ingeandika mistari ifuatayo kwa faili ya pato "output1.txt":

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

Ikiwa mgawanyiko wa safu ni kitu kingine isipokuwa nafasi au tabo, kama vile comma, unaweza kutaja kwamba katika taarifa ya awk ifuatavyo:

Awk -F, '{magazeti $ 3}' table1.txt> output1.txt

Hii itachagua kipengee kutoka safu ya 3 ya kila mstari ikiwa nguzo zinachukuliwa kuwa zimejitenga na comma. Kwa hiyo pato, katika kesi hii, itakuwa:

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

Orodha ya kauli ndani ya mabano ya curly ('{', '}' huitwa block. Ikiwa utaweka kujieleza masharti mbele ya kizuizi, taarifa ndani ya kizuizi itatekelezwa tu ikiwa hali hiyo ni kweli.

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

Katika hali hii, hali hiyo ni $ 7 == "\ $ 7.30", ambayo ina maana kwamba kipengele katika safu ya 7 ni sawa na $ 7.30. Kuondoka nyuma mbele ya ishara ya dola hutumiwa kuzuia mfumo kutoka kutafsiri $ 7 kama mabadiliko na badala ya kuchukua ishara ya dola halisi.

Kwa hiyo taarifa hii ya awk inafungua kipengele kwenye safu ya 3 ya kila mstari una "$ 7.30" kwenye safu ya 7.

Unaweza pia kutumia maneno ya kawaida kama hali. Kwa mfano:

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

Kamba kati ya slashes mbili ('/') ni kujieleza mara kwa mara. Katika kesi hiyo, ni kamba tu "30." Hii inamaanisha ikiwa mstari una kamba "30", mfumo hutoa kipengele kwenye safu ya 3 ya mstari huo. Pato katika mfano hapo juu itakuwa:

Timberlake, Gaga, Presley,

Ikiwa vipengele vya meza ni nambari za awk zinaweza kukimbia mahesabu juu yao kama ilivyo katika mfano huu:

Awk '{magazeti ($ 2 * $ 3) + $ 7}'

Mbali na vigezo vinavyofikia vipengele vya mstari wa sasa ($ 1, $ 2, nk) kuna variable $ 0 ambayo inahusu mstari kamili (mstari), na NF iliyo na idadi ya mashamba.

Unaweza pia kufafanua vigezo vipya kama katika mfano huu:

Awk '{sum = 0; kwa (col = 1; col <= NF; col + +) jumla + = $ col; magazeti ya jumla; } '

Hii inakaribia na inabadilisha jumla ya vipengele vyote vya kila mstari.

Maneno ya Awk mara kwa mara yanajumuishwa na amri ya sed .