Jinsi ya Kutumia Awk na Maneno ya Kawaida ili Kuchuja Maandishi au Kamba kwenye Faili


Tunapoendesha amri fulani katika Unix/Linux ili kusoma au kuhariri maandishi kutoka kwa mfuatano au faili, mara nyingi sisi hujaribu kuchuja pato kwa sehemu fulani ya riba. Hapa ndipo kutumia misemo ya kawaida huja kwa manufaa.

Usemi wa kawaida unaweza kufafanuliwa kama mifuatano inayowakilisha mfuatano kadhaa wa wahusika. Moja ya mambo muhimu zaidi kuhusu maneno ya kawaida ni kwamba wanakuwezesha kuchuja pato la amri au faili, kuhariri sehemu ya maandishi au faili ya usanidi na kadhalika.

Maneno ya kawaida hufanywa na:

  1. Herufi za kawaida kama vile space, underscore(_), A-Z, a-z, 0-9.
  2. Herufi za Meta ambazo zimepanuliwa hadi herufi za kawaida, ni pamoja na:
    1. (.) inalingana na herufi yoyote isipokuwa laini mpya.
    2. (*) inalingana na sifuri au uwepo zaidi wa herufi inayoitangulia.
    3. [ herufi ] inalingana na herufi yoyote iliyobainishwa katika(za)bambo, mtu anaweza pia kutumia kistari (-) kumaanisha safu. ya herufi kama vile [a-f], [1-5], na kadhalika.
    4. ^ inalingana na mwanzo wa mstari katika faili.
    5. $ inalingana na mwisho wa mstari katika faili.
    6. \ ni herufi ya kutoroka.

    Ili kuchuja maandishi, mtu lazima atumie zana ya kuchuja maandishi kama vile awk. Unaweza kufikiria awk kama lugha ya programu yake mwenyewe. Lakini kwa upeo wa mwongozo huu wa kutumia awk, tutaifunika kama zana rahisi ya kuchuja mstari wa amri.

    Syntax ya jumla ya awk ni:

    # awk 'script' filename
    

    Ambapo script ni seti ya amri zinazoeleweka na awk na kutekelezwa kwenye faili, jina la faili.

    Inafanya kazi kwa kusoma mstari uliopewa kwenye faili, hufanya nakala ya mstari na kisha kutekeleza hati kwenye mstari. Hii inarudiwa kwenye mistari yote kwenye faili.

    script iko katika mfumo wa /pattern/ action ambapo muundo ni usemi wa kawaida na kitendo ndicho awk itafanya inapopata mchoro uliotolewa kwenye mstari.

    Jinsi ya kutumia Awk Filtering Tool katika Linux

    Katika mifano ifuatayo, tutazingatia wahusika wa meta ambao tulijadili hapo juu chini ya sifa za awk.

    Mfano hapa chini unachapisha mistari yote kwenye faili /etc/hosts kwani hakuna muundo unaotolewa.

    # awk '//{print}'/etc/hosts
    

    Mimi kwa mfano hapa chini, mchoro localhost umetolewa, kwa hivyo awk italingana na mstari kuwa na mwenyeji katika /etc/hosts faili.

    # awk '/localhost/{print}' /etc/hosts 
    

    (.) italingana na mifuatano iliyo na loc, localhost, localnet katika mfano ulio hapa chini.

    Hiyo ni kusema * l some_single_character c *.

    # awk '/l.c/{print}' /etc/hosts
    

    Italingana na kamba zilizo na localhost, localnet, mistari, yenye uwezo, kama ilivyo kwenye mfano hapa chini:

    # awk '/l*c/{print}' /etc/localhost
    

    Pia utagundua kuwa (*) inajaribu kupata mechi ndefu zaidi inayoweza kugundua.

    Hebu tuangalie kesi inayoonyesha hili, chukua usemi wa kawaida t*t unaomaanisha mifuatano inayoanza na herufi t na kumalizia na t katika mstari hapa chini:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 
    

    Utapata uwezekano ufuatao unapotumia muundo /t*t/:

    this is t
    this is tecmint
    this is tecmint, where you get t
    this is tecmint, where you get the best good t
    this is tecmint, where you get the best good tutorials, how t
    this is tecmint, where you get the best good tutorials, how tos, guides, t
    this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
    

    Na (*) katika /t*t/ herufi ya kadi-mwitu inaruhusu awk kuchagua chaguo la mwisho:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
    

    Chukua kwa mfano seti ya [al1], hapa awk italingana na mifuatano yote iliyo na herufi a au l au 1 kwenye mstari kwenye faili /etc/hosts.

    # awk '/[al1]/{print}' /etc/hosts
    

    Mfano unaofuata unalingana na mifuatano inayoanza na K au k ikifuatiwa na T:

    # awk '/[Kk]T/{print}' /etc/hosts 
    

    Kuelewa wahusika na awk:

    1. [0-9] inamaanisha nambari moja
    2. [a-z] ina maana inayolingana na herufi ndogo moja
    3. [A-Z] ina maana inayolingana na herufi kubwa moja
    4. [a-zA-Z] ina maana inayolingana na herufi moja
    5. [a-zA-Z 0-9] ina maana inayolingana na herufi moja au nambari

    Hebu tuangalie mfano hapa chini:

    # awk '/[0-9]/{print}' /etc/hosts 
    

    Laini zote kutoka kwa faili /etc/hosts zina angalau nambari moja [0-9] katika mfano ulio hapo juu.

    Inalingana na mistari yote inayoanza na muundo uliotolewa kama katika mfano hapa chini:

    # awk '/^fe/{print}' /etc/hosts
    # awk '/^ff/{print}' /etc/hosts
    

    Inalingana na mistari yote inayoisha na muundo uliotolewa:

    # awk '/ab$/{print}' /etc/hosts
    # awk '/ost$/{print}' /etc/hosts
    # awk '/rs$/{print}' /etc/hosts
    

    Inakuruhusu kuchukua mhusika anayeifuata kama halisi ambayo ni kusema ifikirie kama ilivyo.

    Katika mfano hapa chini, amri ya kwanza inachapisha safu zote kwenye faili, amri ya pili haichapishi chochote kwa sababu ninataka kulinganisha laini ambayo ina $25.00, lakini hakuna herufi ya kutoroka inayotumiwa.

    Amri ya tatu ni sahihi kwani herufi ya kutoroka imetumika kusoma $kama ilivyo.

    # awk '//{print}' deals.txt
    # awk '/$25.00/{print}' deals.txt
    # awk '/\$25.00/{print}' deals.txt
    

    Muhtasari

    Hiyo sio yote na zana ya kuchuja ya mstari wa amri ya awk, mifano hapo juu a shughuli za kimsingi za awk. Katika sehemu zinazofuata tutakuwa tukiendeleza jinsi ya kutumia vipengele changamano vya awk. Asante kwa kusoma na kwa nyongeza au ufafanuzi wowote, chapisha maoni katika sehemu ya maoni.