Աշխատեք 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] |