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:
emri_variable
: është emri që i jepni një variablivlera
: 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:
*
: operatori i shumëzimit+
: operator shtesë/
: operatori i ndarjes-
: operatori i zbritjes%
: operatori i modulit^
: 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:
*=
: operatori i caktimit të shumëzimit+=
: operatori i caktimit të shtesave/=
: operatori i caktimit të ndarjes-=
: operatori i caktimit të zbritjes%=
: operatori i caktimit të modulit^=
: 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.