15 հետաքրքիր awk հրամաններ


Այս հոդվածը ձեզ կներկայացնի մի քանի հետաքրքիր awk հրամաններ և երբ դրանք օգտագործել: Կարդացեք՝ պարզելու համար:

Ներածություն awk

AWK-ն հայտնի լեզու է UNIX-ում և Linux-ում: Այն ստացել է իր անունը իր հեղինակներից՝ Ալֆրեդ Ահոյից, Փիթեր Վայնբերգերից և Բրայան Քերնիգանից։ awk հրամանը թույլ է տալիս մուտք գործել AWK ծրագրավորման լեզու, որը նախատեսված է տեքստային հոսքերի մեջ տվյալները մշակելու համար:

Հանրաճանաչորեն օգտագործվող օրինաչափությունների սկանավորման և բարդ գործողությունների պարզեցման համար՝ awk-ն օգնում է ձեզ գրել արդյունավետ հայտարարություններ՝ ֆայլում տեքստային նախշերը սահմանելու համար: Այնուհետև awk հրամանը մշակում է այս հայտարարությունները՝ կարդալով մեկ տող և կատարում է գործողություն՝ հիմնվելով տրված պայմանի վրա:

Պարզ ասած, awk-ը գտնում և փոխարինում է տեքստը և օգնում է տեսակավորել, վավերացնել կամ ինդեքսավորել տվյալ տվյալները:

AWK-ի առանձնահատկությունները

awk-ն ունի բազմաթիվ եզակի առանձնահատկություններ.

  1. Awk-ում կոմպիլյացիան անհրաժեշտ չէ

  2. Հաճախ օգտագործվում է տվյալների արդյունահանման համար

  3. Սովորաբար օգտագործվում է տեքստի մանիպուլյացիա կատարելու համար

  4. Անհրաժեշտության դեպքում օգնում է արդյունքներ ստեղծել:

Այժմ եկեք ուսումնասիրենք awk հրամանների ուժը:

15 հետաքրքիր awk հրամաններ

Ահա մի քանի հետաքրքիր awk հրամանների կազմված ցուցակ.

  1. Պատահական թվերի տպում հավաքածուում – Ենթադրենք, որ ցանկանում եք տպել մի քանի պատահական թվեր ընտրված լողավազանից: Դուք կարող եք նշել պատահական թվերի քանակը այս լողավազանից և խնդրել awk-ին տպել սա: Ահա մի օրինակ. եկեք տպենք 10 թվեր 0-ից մինչև 1000: Այսպիսով, awk հրամանը կլինի հետևյալը.

    awk 'BEGIN { for (i = 1; i <= 10; i++)
    print int(1001 * rand()) }'
  1. Որոնել foo-ի կամ bar-ի համար – Իսկ եթե ցանկանում եք գրել տող, որտեղ ցանկանում եք կատարել foo-ի կամ bar-ի պարզ որոնում: Ահա մի հրաման, որը թույլ կտա ձեզ դա անել.

    if (/foo/ || /bar/)
    print "Found!"
  1. Դաշտի վերադասավորում – Եթե ցանկանում եք որոշակի դաշտ տպել որոշակի հերթականությամբ, awk-ը կարող է դա անել ձեզ համար: Ենթադրենք, որ ցանկանում եք տպել որոշակի հավաքածուի առաջին 5 դաշտերը մեկ դաշտում յուրաքանչյուր տողում, կարող եք օգտագործել հետևյալ հրամանը.

    awk ’{ i = 1
    while (i <= 3) {
    print $i
    i++
    }
    }’ inputfile
  1. Գծի բաժանում – Ֆայլերի ցանկացած հավաքածուում awk-ը կարող է օգնել տողը բաժանել դաշտերի, որտեղ x-ը դաշտի անունն է.

    $ awk '{print $x,$x}'xyz.txt
  1. Միաժամանակ մի քանի հրամանների գործարկում – Մի քանի հրամաններ միանգամից գործարկելու համար կարող եք օգտագործել կետ-ստորակետ՝ երկու հրամանները նշելու համար.

    $ echo "Good morning! Jack" | awk '{$2="Jill"; print $0}'
  1. awk script-ի կատարում – Եթե ցանկանում եք կատարել awk script որոշակի ֆայլից, կարող եք ստեղծել ֆայլի sum_column և տեղադրել ստորև նշված սցենարը այդ ֆայլում.

    #!/usr/bin/awk -f
    BEGIN {sum=0}
    {sum=sum+$x}
    END {print sum}

    Վերոնշյալ սցենարում x-ը հավասար է այն սյունին, որը դուք պետք է մուտքագրեք ֆայլում: Այս առաջադրանքի հաջող ավարտից հետո դուք կարող եք օգտագործել հետևյալ հրամանը՝ մուտքագրված ֆայլում x սյունակի գումարը ցուցադրելու համար.

    awk -f sum_column input_file.
  1. Օգտագործելով –f – Կոդավորման ժամանակ հաճախ կարող է անիրագործելի թվալ տերմինալին դիմելը: awk-ն օգտագործում է –f ֆայլից որոնում կատարելու համար.

    awk -f script.awk inputfile
  1. Մաթեմատիկական գործառույթների կատարում – Դուք կարող եք նաև օգտագործել awk պարզ մաթեմատիկական ֆունկցիաների համար.

    awk ’{ sum = $2 + $3 + $4 ; avg = sum / 3
    > print $1, avg }’ grades
  1. Hello World in awk – Դուք կարող եք տպել պարզ Hello World awk-ում՝ օգտագործելով հետևյալ հրամանը.

    awk "BEGIN { print "Hello World!!" }"

    Կարող եք նաև ստեղծել «Բարև աշխարհ» ծրագիր: Հետևյալ կոդը ոչ միայն կտպագրի ամենուր տարածված բարևի հաղորդագրությունը, այլև կստեղծի վերնագրի տեղեկատվություն.

    $ awk 'BEGIN { print "Hello World!" }'
  1. Բայթերի ընդհանուր քանակի տպում – Դուք կարող եք պարզել ֆայլերի կողմից օգտագործվող ընդհանուր բայթերը՝ օգտագործելով հետևյալ հրամանը.

    ls -l . | awk '{ x += $5 } ; END \
    { print "total bytes: " x }'

    total bytes: 7449362
  1. Apache-ի մատյանների անանունացում – Դուք կարող եք օգտագործել հետևյալ կոդը՝ Apache-ի մատյանն անանուն դարձնելու համար.

    cat apache-anon-noadmin.log | \
    awk 'function ri(n) \
    {  return int(n*rand()); }  \
    BEGIN { srand(); }  { if (! \
    ($5 in jack)) {  \
    jack[$5] = sprintf("%d.%d.%d.%d", \
    ri(255), ri(255)\
    , ri(255), ri(255)); } \
    $5 = jack[$5]; print __g5_token5b610ba53dbe4  }'
  1. Գործողություն տողերում – Եթե ունեք հասցե, որը ցանկանում եք տեսակավորել տողերով, կարող եք դա անել՝ օգտագործելով հետևյալ հրամանը.

    BEGIN { RS = "" ; FS = "\n" }
    {
    print "Name is:", $1
    print "Address is:", $2
    print "City and State are:", $3
    print ""
    }
  1. Օգտագործելով while հանգույցը – while հանգույցը շարունակում է կատարել իրեն տրված գործողությունը կրկնվող գործընթացով, մինչև պայմանը ճշմարիտ լինի: Օրինակ, 1-ից 100 համարները տպելու համար կարող եք օգտագործել հետևյալ կոդը.

    awk 'BEGIN {i = 1; while (i < 100) { print i; ++i } }'
  1. Օգտագործելով do-while հանգույցը – Այս օղակում պայմանը կատարվում է օղակի վերջում, նույնիսկ եթե հայտարարությունը կեղծ է: Օրինակ, 1-ից 100 թվերը տպելու համար do-while հանգույցի միջոցով կարող եք օգտագործել հետևյալ կոդը.

    awk 'BEGIN {i = 1; do { print i; ++i } while (i < 100) }'
  1. Օգտագործելով BEGIN և END – BEGIN հիմնաբառն օգտագործվում է ձեր գրառումը մշակելու համար վերնագիր ստեղծելու համար:

    $ awk 'BEGIN {print "XXX"}

    Նույն կերպ տվյալների մշակումից հետո օգտագործվում է END բանալի բառը.

    END {print "File footer"}'