Mësoni se si të përdorni variablat Awk, shprehjet numerike dhe operatorët e detyrave - Pjesa 8


Seria e komandave Awk po bëhet emocionuese besoj, në shtatë pjesët e mëparshme, ne kemi kaluar nëpër disa baza të Awk që duhet të zotëroni për t'ju mundësuar të kryeni disa filtrim bazë teksti ose vargu në Linux.

Duke filluar me këtë pjesë, ne do të zhytemi në zonat e avancuara të Awk për të trajtuar operacione më komplekse të filtrimit të tekstit ose vargut. Prandaj, ne do të mbulojmë veçoritë e Awk si variablat, shprehjet numerike dhe operatorët e caktimit.

Këto koncepte nuk janë tërësisht të dallueshme nga ato që mund të keni hasur në shumë gjuhë programimi përpara një shell të tillë, C, Python plus shumë të tjera, kështu që nuk ka nevojë të shqetësoheni shumë për këtë temë, ne thjesht po rishikojmë idetë e zakonshme të përdorimit këto veçori të përmendura.

Ky ndoshta do të jetë një nga seksionet më të lehta të komandës Awk për t'u kuptuar, kështu që rri duarkryq dhe le të fillojmë.

1. Variablat Awk

Në çdo gjuhë programimi, një variabël është një mbajtës vendi i cili ruan një vlerë, kur krijoni një ndryshore në një skedar programi, ndërsa skedari ekzekutohet, krijohet një hapësirë në memorie që do të ruajë vlerën që specifikoni për variablin.

Ju mund të përcaktoni variablat Awk në të njëjtën mënyrë që përcaktoni variablat e guaskës si më poshtë:

variable_name=value 

Në sintaksën e mësipërme:

  1. emri_variable: është emri që i jepni një variabli
  2. vlera: vlera e ruajtur në variabël

Le të shohim disa shembuj më poshtë:

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

Hidhini një sy shembujve të thjeshtë të mësipërm, në përkufizimin e parë të ndryshores, vlera linux-console.net i është caktuar ndryshores emri_kompjuterit.

Për më tepër, vlera 22 i caktohet variablës port_no, është gjithashtu e mundur të caktohet vlera e një ndryshore në një variabël tjetër si në shembullin e fundit ku kemi caktuar vlerën e emri_kompjuterit në serverin e ndryshueshëm.

Nëse ju kujtohet, pikërisht nga pjesa 2 e kësaj serie Awk ku kemi mbuluar redaktimin në terren, kemi folur për mënyrën se si Awk ndan linjat hyrëse në fusha dhe përdor operatorin standard të aksesit në terren, $ për të lexuar fushat e ndryshme që janë analizuar. Ne gjithashtu mund të përdorim variabla për të ruajtur vlerat e fushave si më poshtë.

first_name=$2
second_name=$3

Në shembujt e mësipërm, vlera e first_name është vendosur në fushën e dytë dhe second_name është vendosur në fushën e tretë.

Si ilustrim, merrni parasysh një skedar me emrin names.txt i cili përmban një listë të përdoruesve të një aplikacioni që tregon emrin dhe mbiemrin e tyre plus gjininë. Duke përdorur komandën cat, ne mund të shohim përmbajtjen e skedarit si më poshtë:

$ cat names.txt

Pastaj, ne mund të përdorim gjithashtu variablat first_name dhe second_name për të ruajtur emrat e parë dhe të dytë të përdoruesit të parë në listë, si duke ekzekutuar komandën Awk më poshtë:

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

Le të hedhim një vështrim edhe në një rast tjetër, kur lëshoni komandën uname -a në terminalin tuaj, ai printon të gjithë informacionin e sistemit tuaj.

Fusha e dytë përmban hostname tuaj, prandaj ne mund ta ruajmë emrin e hostit në një variabël të quajtur hostname dhe ta printojmë duke përdorur Awk si më poshtë:

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

2. Shprehje numerike

Në Awk, shprehjet numerike ndërtohen duke përdorur operatorët numerikë të mëposhtëm:

  1. * : operatori i shumëzimit
  2. + : operator shtesë
  3. / : operatori i ndarjes
  4. - : operatori i zbritjes
  5. % : operatori i modulit
  6. ^ : operatori i fuqisë

Sintaksa për një shprehje numerike është:

$ operand1 operator operand2

Në formën e mësipërme, operand1 dhe operand2 mund të jenë numra ose emra variablash, dhe operator është cilido nga operatorët e mësipërm.

Më poshtë janë disa shembuj për të demonstruar se si të ndërtoni shprehje numerike:

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

Për të kuptuar përdorimin e shprehjeve numerike në Awk, do të shqyrtojmë shembullin e mëposhtëm më poshtë, me skedarin domains.txt i cili përmban të gjitha domenet në pronësi të 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

Për të parë përmbajtjen e skedarit, përdorni komandën e mëposhtme:

$ cat domains.txt

Nëse duam të numërojmë numrin e herëve që domeni linux-console.net shfaqet në skedar, mund të shkruajmë një skript të thjeshtë për ta bërë këtë si më poshtë:

#!/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

Pas krijimit të skriptit, ruajeni dhe bëjeni të ekzekutueshëm, kur e ekzekutojmë me skedarin, domains.txt si hyrje jashtë, marrim daljen e mëposhtme:

$ ./script.sh  ~/domains.txt

Nga dalja e skriptit, ka 6 rreshta në skedarin domains.txt të cilat përmbajnë linux-console.net, për të konfirmuar që mund t'i numëroni manualisht.

3. Operatorët e caktimit

Tipari i fundit Awk që do të mbulojmë janë operatorët e caktimit, ka disa operatorë caktimi në Awk dhe këta përfshijnë sa vijon:

  1. *= : operatori i caktimit të shumëzimit
  2. += : operatori i caktimit të shtesave
  3. /= : operatori i caktimit të ndarjes
  4. -= : operatori i caktimit të zbritjes
  5. %= : operatori i caktimit të modulit
  6. ^= : operatori i caktimit të fuqisë

Sintaksa më e thjeshtë e një operacioni caktimi në Awk është si më poshtë:

$ variable_name=variable_name operator operand

Shembuj:

counter=0
counter=counter+1

num=20
num=num-1

Ju mund të përdorni operatorët e caktimit të mësipërm për të shkurtuar operacionet e caktimit në Awk, merrni parasysh shembujt e mëparshëm, ne mund ta kryejmë caktimin në formën e mëposhtme:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Prandaj, ne mund të ndryshojmë komandën Awk në skriptin e guaskës që sapo shkruam më lart duke përdorur operatorin e caktimit += si më poshtë:

#!/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

Në këtë segment të serisë Awk, ne mbuluam disa veçori të fuqishme Awk, që janë variabla, ndërtimi i shprehjeve numerike dhe përdorimi i operatorëve të caktimit, plus disa ilustrime se si mund t'i përdorim ato në të vërtetë.

Këto koncepte nuk janë aspak të ndryshme nga ato në gjuhët e tjera të programimit, por mund të ketë disa dallime të rëndësishme nën programimin Awk.

Në pjesën 9, do të shikojmë më shumë veçori të Awk që janë modele të veçanta: BEGIN dhe END. Deri atëherë, qëndroni të lidhur me Tecmint.