Աշխատեք Awk փոփոխականների, արտահայտությունների և օպերատորների հետ


Awk հրամանների շարքը դառնում է հետաքրքիր: Կարծում եմ, որ նախորդ յոթ մասերում մենք քայլեցինք Awk-ի որոշ հիմունքների միջով, որոնք դուք պետք է տիրապետեք, որպեսզի կարողանաք կատարել հիմնական տեքստի կամ տողերի զտում Linux-ում:

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

Այս հասկացությունները էականորեն չեն տարբերվում նրանցից, որոնք դուք նախկինում հանդիպել եք ծրագրավորման բազմաթիվ լեզուներում, ինչպիսիք են Shell-ը, C-ն, Python-ը և շատ ուրիշներ: Այնպես որ, այս թեմայով շատ անհանգստանալու կարիք չկա. մենք պարզապես վերանայում ենք այս հատկանիշների օգտագործման ընդհանուր գաղափարները:

Սա, հավանաբար, կլինի Awk հրամանի ամենահեշտ բաժիններից մեկը՝ հասկանալու համար, այնպես որ նստեք և եկեք գնանք

1. Awk փոփոխականներ

Ծրագրավորման ցանկացած լեզվում փոփոխականը տեղապահ է, որը պահում է արժեք: Երբ դուք փոփոխական եք ստեղծում ծրագրի ֆայլում, երբ ֆայլը կատարվում է, հիշողության մեջ ստեղծվում է որոշակի տարածք, որը կպահի փոփոխականի համար ձեր նշած արժեքը:

Դուք կարող եք սահմանել Awk փոփոխականները այնպես, ինչպես դուք սահմանում եք shell փոփոխականները հետևյալ կերպ.

variable_name=value 

Վերևի շարահյուսության մեջ.

  • variable_name. այն անունն է, որը դուք տալիս եք փոփոխականին:
  • արժեք՝ փոփոխականում պահվող արժեքը:

Դիտարկենք ստորև բերված մի քանի օրինակներ.

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

Նայեք վերը նշված պարզ օրինակներին, առաջին փոփոխականի սահմանման մեջ linux-console.net արժեքը վերագրված է computer_name փոփոխականին:

Ավելին, 22 արժեքը վերագրվում է port_no փոփոխականին, հնարավոր է նաև մի փոփոխականի արժեքը վերագրել մեկ այլ փոփոխականի, ինչպես վերջին օրինակում, որտեղ մենք վերագրել ենք արժեքը: computer_name-ից դեպի փոփոխական սերվեր:

Եթե կարող եք հիշել, հենց այս Awk շարքի 2-րդ մասից, որտեղ մենք անդրադարձանք դաշտերի խմբագրմանը, մենք խոսեցինք այն մասին, թե ինչպես է Awk-ը մուտքային տողերը բաժանում դաշտերի և օգտագործում է ստանդարտ դաշտի հասանելիության օպերատոր՝ $՝ տարբերը կարդալու համար։ վերլուծված դաշտերը: Մենք կարող ենք նաև փոփոխականներ օգտագործել դաշտերի արժեքները պահելու համար հետևյալ կերպ.

first_name=$2
second_name=$3

Վերոնշյալ օրինակներում first_name արժեքը սահմանվում է երկրորդ դաշտում, իսկ second_name՝ երրորդ դաշտում:

Որպես օրինակ՝ դիտարկեք names.txt անունով ֆայլը, որը պարունակում է օգտվողների ցանկ՝ նշելով նրանց անունը և ազգանունը, գումարած սեռը:

Օգտագործելով cat հրամանը, մենք կարող ենք դիտել ֆայլի բովանդակությունը հետևյալ կերպ

cat names.txt

Այնուհետև մենք կարող ենք նաև օգտագործել first_name և second_name փոփոխականները՝ ցուցակում առաջին օգտատիրոջ առաջին և երկրորդ անունները պահելու համար, ինչպես գործարկելով Awk > հրամանը ստորև.

awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

Եկեք նայենք նաև մեկ այլ դեպքի, երբ ձեր տերմինալի վրա թողարկեք uname -a հրամանը, այն տպում է ձեր համակարգի ամբողջ տեղեկատվությունը:

Երկրորդ դաշտը պարունակում է ձեր hostname, հետևաբար մենք կարող ենք պահել hostname փոփոխականում, որը կոչվում է hostname և տպել այն օգտագործելով Awk > հետևյալ կերպ.

uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. Թվային արտահայտություններ

Awk-ում թվային արտահայտությունները կառուցվում են հետևյալ թվային օպերատորների միջոցով.

  • *՝ բազմապատկման օպերատոր
  • +՝ ավելացման օպերատոր
  • /՝ բաժանման օպերատոր
  • - : հանման օպերատոր
  • %՝ մոդուլի օպերատոր
  • ^ : աստիճանի օպերատոր

Թվային արտահայտության շարահյուսությունը հետևյալն է.

operand1 operator operand2

Վերոնշյալ ձևով operand1 և operand2 կարող են լինել թվեր կամ փոփոխականների անուններ, իսկ operator-ը վերը նշված օպերատորներից որևէ մեկն է:

Ստորև բերված են մի քանի օրինակներ՝ ցույց տալու համար, թե ինչպես կարելի է թվային արտահայտություններ կառուցել.

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Awk-ում թվային արտահայտությունների օգտագործումը հասկանալու համար մենք կքննարկենք ստորև բերված օրինակը՝ domains.txt ֆայլով, որը պարունակում է Tecmint-ին պատկանող բոլոր տիրույթները: ուժեղ>.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

Ֆայլի բովանդակությունը դիտելու համար օգտագործեք ստորև նշված հրամանը.

cat domains.txt

Եթե մենք ուզում ենք հաշվել, թե քանի անգամ է linux-console.net տիրույթը հայտնվում ֆայլում, մենք կարող ենք գրել պարզ սկրիպտ՝ դա անելու համար հետևյալ կերպ.

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Սկրիպտը ստեղծելուց հետո պահեք այն և դարձրեք այն գործարկելի, երբ այն գործարկենք ֆայլով, domains.txt որպես մուտքագրում, ստանում ենք հետևյալ ելքը.

./script.sh  ~/domains.txt

Սցենարի ելքից domains.txt ֆայլում կա 6 տող, որոնք պարունակում են linux-console.net՝ հաստատելու, որ կարող եք ձեռքով հաշվել դրանք:

3. Հանձնարարության օպերատորներ

Վերջին Awk հատկանիշը, որը մենք կանդրադառնանք, հանձնարարական օպերատորներն են, Awk-ում կան մի քանի հանձնարարական օպերատորներ, և դրանք ներառում են հետևյալը.

  • *=՝ բազմապատկման նշանակման օպերատոր
  • +=՝ ավելացման հանձնարարական օպերատոր
  • /=՝ բաժանման հանձնարարության օպերատոր
  • -= : հանման հանձնարարության օպերատոր
  • %= : մոդուլի նշանակման օպերատոր
  • ^=՝ աստիճանի նշանակման օպերատոր

Awk-ում հանձնարարական գործողության ամենապարզ շարահյուսությունը հետևյալն է.

variable_name=variable_name operator operand

Օրինակներ.

counter=0
counter=counter+1

num=20
num=num-1

Դուք կարող եք օգտագործել վերը նշված հանձնարարությունների օպերատորները՝ Awk-ում հանձնարարական գործողությունները կրճատելու համար, հաշվի առեք նախորդ օրինակները, մենք կարող ենք հանձնարարությունը կատարել հետևյալ ձևով.

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Հետևաբար, մենք կարող ենք փոխել Awk հրամանը shell script-ում, որը մենք հենց նոր գրեցինք վերևում, օգտագործելով += հանձնարարական օպերատորը հետևյալ կերպ.

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Awk հրամանների շարքի այս հատվածում մենք լուսաբանեցինք մի քանի հզոր Awk առանձնահատկություններ, ինչպիսիք են փոփոխականները, թվային արտահայտությունների կառուցումը և հանձնարարությունների օպերատորների օգտագործումը, ինչպես նաև մի քանի նկարազարդումներ, թե ինչպես կարող ենք իրականում օգտագործել դրանք:

Այս հասկացությունները ոչնչով չեն տարբերվում ծրագրավորման այլ լեզուների հասկացություններից, սակայն Awk ծրագրավորման ներքո կարող են լինել որոշ էական տարբերություններ:

9-րդ մասում մենք կանդրադառնանք ավելի Awk հատկանիշներին, որոնք հատուկ օրինաչափություններ են՝ BEGIN և END: Մինչ այդ, միացված մնացեք Tecmint-ին:

Նրանց համար, ովքեր փնտրում են համապարփակ ռեսուրս, մենք հավաքել ենք Awk շարքի բոլոր հոդվածները գրքի մեջ, որը ներառում է 13 գլուխ և ընդգրկում է 41 էջ, որն ընդգրկում է ինչպես հիմնական, այնպես էլ առաջադեմ Awk օգտագործումը գործնական օրինակներով:

Product Name Price Buy
eBook: Introducing the Awk Getting Started Guide for Beginners $8.99 [Buy Now]