Jifunze Jinsi ya Kutumia Vigeu vya Awk, Misemo ya Nambari na Viendeshaji Kazi - Sehemu ya 8
Mfululizo wa amri ya Awk unasisimua Ninaamini, katika sehemu saba zilizopita, tulipitia baadhi ya misingi ya Awk ambayo unahitaji kujua ili kukuwezesha kutekeleza baadhi ya maandishi ya msingi au uchujaji wa kamba katika Linux.
Kuanzia na sehemu hii, tutazama katika maeneo ya mapema ya Awk ili kushughulikia shughuli ngumu zaidi za kuchuja maandishi au kamba. Kwa hivyo, tutashughulikia vipengele vya Awk kama vile viambajengo, misemo ya nambari na waendeshaji kazi.
Dhana hizi sio tofauti kabisa na zile ambazo labda umekutana nazo katika lugha nyingi za programu kabla ya ganda kama hilo, C, Python pamoja na zingine nyingi, kwa hivyo hakuna haja ya kuwa na wasiwasi sana juu ya mada hii, tunarekebisha maoni ya kawaida ya kutumia. vipengele hivi vilivyotajwa.
Labda hii itakuwa moja wapo ya sehemu rahisi za amri ya Awk kuelewa, kwa hivyo kaa chini na tuendelee.
1. Vigezo vya Awk
Katika lugha yoyote ya programu, kutofautiana ni kishikilia mahali ambacho huhifadhi thamani, unapounda kutofautiana katika faili ya programu, faili inapotekelezwa, nafasi fulani imeundwa katika kumbukumbu ambayo itahifadhi thamani unayotaja kwa kutofautiana.
Unaweza kufafanua anuwai za Awk kwa njia ile ile unayofafanua vijiti vya ganda kama ifuatavyo:
variable_name=value
Katika syntax hapo juu:
variable_name
: ni jina unalotoa kigezothamani
: thamani iliyohifadhiwa katika kigezo
Hebu tuangalie baadhi ya mifano hapa chini:
computer_name=”linux-console.net” port_no=”22” email=”[email ” server=”computer_name”
Angalia mifano rahisi hapo juu, katika ufafanuzi wa kwanza wa kutofautisha, thamani linux-console.net
imetolewa kwa kigezo kompyuta_name
.
Zaidi ya hayo, thamani 22
imetolewa kwa tofauti port_no
, inawezekana pia kugawa thamani ya kigezo kimoja kwa kigezo kingine kama katika mfano wa mwisho ambapo tuligawa thamani. ya jina_la_kompyuta
kwa seva inayobadilika.
Ikiwa unaweza kukumbuka, moja kwa moja kutoka sehemu ya 2 ya mfululizo huu wa Awk tulishughulikia uhariri wa sehemu, tulizungumza kuhusu jinsi Awk inavyogawanya mistari ya ingizo katika sehemu na kutumia opereta wa kawaida wa ufikiaji wa uga, $
kusoma sehemu tofauti ambazo yamechanganuliwa. Tunaweza pia kutumia viambajengo kuhifadhi thamani za sehemu kama ifuatavyo.
first_name=$2 second_name=$3
Katika mifano iliyo hapo juu, thamani ya jina_la_kwanza
imewekwa kwenye sehemu ya pili na jina_la_pili
imewekwa kwenye sehemu ya tatu.
Kama kielelezo, zingatia faili inayoitwa names.txt
ambayo ina orodha ya watumiaji wa programu inayoonyesha majina yao ya kwanza na ya mwisho pamoja na jinsia. Kutumia paka amri, tunaweza kuona yaliyomo kwenye faili kama ifuatavyo:
$ cat names.txt
Kisha, tunaweza pia kutumia viambajengo first_name
na second_name
kuhifadhi majina ya kwanza na ya pili ya mtumiaji wa kwanza kwenye orodha kama kwa kutekeleza amri ya Awk hapa chini:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
Hebu pia tuangalie kesi nyingine, unapotoa amri uname -a
kwenye terminal yako, itachapisha taarifa zako zote za mfumo.
Sehemu ya pili ina jina la mwenyeji
, kwa hivyo tunaweza kuhifadhi jina la mpangishi katika kigezo kiitwacho jina la mwenyeji
na kulichapisha kwa kutumia Awk kama ifuatavyo:
$ uname -a $ uname -a | awk '{hostname=$2 ; print hostname ; }'
2. Vielezi vya Nambari
Katika Awk, misemo ya nambari hujengwa kwa kutumia waendeshaji nambari zifuatazo:
*
: opereta ya kuzidisha+
: opereta nyongeza/
: mgawanyiko wa opereta-
: mwendeshaji wa kutoa%
: mwendeshaji wa moduli^
: mwendeshaji wa ufafanuzi
Sintaksia ya misemo ya nambari ni:
$ operand1 operator operand2
Katika fomu iliyo hapo juu, operand1
na operand2
zinaweza kuwa nambari au majina tofauti, na opereta
ni yoyote kati ya waendeshaji hapo juu.
Ifuatayo ni mifano ya kuonyesha jinsi ya kuunda misemo ya nambari:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
Ili kuelewa matumizi ya usemi wa nambari katika Awk, tutazingatia mfano ufuatao hapa chini, na faili domains.txt
ambayo ina vikoa vyote vinavyomilikiwa na 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
Kuangalia yaliyomo kwenye faili, tumia amri hapa chini:
$ cat domains.txt
Ikiwa tunataka kuhesabu mara ambazo kikoa linux-console.net
kinatokea kwenye faili, tunaweza kuandika hati rahisi kufanya hivyo kama ifuatavyo:
#!/bin/bash for file in [email ; 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
Baada ya kuunda hati, ihifadhi na uifanye itekelezwe, tunapoiendesha na faili, domains.txt
kama ingizo la nje, tunapata matokeo yafuatayo:
$ ./script.sh ~/domains.txt
Kutoka kwa matokeo ya hati, kuna mistari 6 kwenye faili domains.txt
ambayo ina linux-console.net
, ili kuthibitisha kuwa unaweza kuzihesabu wewe mwenyewe.
3. Waendeshaji Kazi
Kipengele cha mwisho cha Awk tutakachoshughulikia ni waendeshaji kazi, kuna waendeshaji kadhaa wa kazi katika Awk na hawa ni pamoja na yafuatayo:
*=
: opereta mgao wa kuzidisha+=
: opereta mgawo wa nyongeza/=
: mgawanyiko wa opereta-=
: opereta mgawo wa kutoa%=
: mwendeshaji wa kazi ya moduli^=
: opereta mgawo wa ufafanuzi
Syntax rahisi zaidi ya operesheni ya mgawo katika Awk ni kama ifuatavyo.
$ variable_name=variable_name operator operand
Mifano:
counter=0 counter=counter+1 num=20 num=num-1
Unaweza kutumia waendeshaji mgawo ulio hapo juu kufupisha utendakazi wa mgawo katika Awk, fikiria mifano iliyotangulia, tunaweza kutekeleza mgawo huo kwa fomu ifuatayo:
variable_name operator=operand
counter=0 counter+=1 num=20 num-=1
Kwa hivyo, tunaweza kubadilisha amri ya Awk kwenye hati ya ganda ambayo tumeandika hapo juu kwa kutumia +=
opereta ya mgawo kama ifuatavyo:
#!/bin/bash for file in [email ; 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
Katika sehemu hii ya mfululizo wa Awk, tuliangazia vipengele vingine vya nguvu vya Awk, ambavyo ni vigeu, kuunda semi za nambari na kutumia viendeshaji kazi, pamoja na vielelezo vichache vya jinsi tunavyoweza kuvitumia.
Dhana hizi sio tofauti na ile iliyo katika lugha zingine za programu lakini kunaweza kuwa na tofauti kubwa chini ya upangaji wa Awk.
Katika sehemu ya 9, tutaangalia vipengele zaidi vya Awk ambavyo ni ruwaza maalum: BEGIN
na END
. Hadi wakati huo, endelea kushikamana na Tecmint.