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:

  1. variable_name: ni jina unalotoa kigezo
  2. thamani: 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:

  1. * : opereta ya kuzidisha
  2. + : opereta nyongeza
  3. / : mgawanyiko wa opereta
  4. - : mwendeshaji wa kutoa
  5. % : mwendeshaji wa moduli
  6. ^ : 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:

  1. *= : opereta mgao wa kuzidisha
  2. += : opereta mgawo wa nyongeza
  3. /= : mgawanyiko wa opereta
  4. -= : opereta mgawo wa kutoa
  5. %= : mwendeshaji wa kazi ya moduli
  6. ^= : 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.