Lærðu hvernig á að nota Awk breytur, tölulegar tjáningar og verkefnastjóra - 8. hluti


Awk skipana röðin er að verða spennandi. Ég tel að í fyrri sjö hlutunum fórum við í gegnum nokkur grundvallaratriði Awk sem þú þarft að læra til að gera þér kleift að framkvæma grunn texta eða strengasíun í Linux.

Frá og með þessum hluta munum við kafa inn í fyrirfram svæði Awk til að takast á við flóknari texta- eða strengasíuaðgerðir. Þess vegna ætlum við að fjalla um Awk eiginleika eins og breytur, tölulegar tjáningar og úthlutunaraðgerðir.

Þessi hugtök eru ekki alhliða aðgreind frá þeim sem þú gætir hafa rekist á í mörgum forritunarmálum áður en slík skel, C, Python auk margra annarra, svo það er engin þörf á að hafa miklar áhyggjur af þessu efni, við erum einfaldlega að endurskoða algengar hugmyndir um notkun þessir nefndu eiginleikar.

Þetta mun líklega vera einn auðveldasti Awk skipunarhlutinn til að skilja, svo hallaðu þér aftur og látum af stað.

1. Awk breytur

Í hvaða forritunarmáli sem er, er breyta staðhaldari sem geymir gildi, þegar þú býrð til breytu í forritaskrá, þegar skráin er keyrð, myndast eitthvað pláss í minni sem mun geyma gildið sem þú tilgreinir fyrir breytuna.

Þú getur skilgreint Awk breytur á sama hátt og þú skilgreinir skelbreytur sem hér segir:

variable_name=value 

Í setningafræðinni hér að ofan:

  1. breytu_nafn: er nafnið sem þú gefur breytu
  2. gildi: gildið sem er geymt í breytunni

Við skulum skoða nokkur dæmi hér að neðan:

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

Skoðaðu einföldu dæmin hér að ofan, í fyrstu breytuskilgreiningunni er gildinu linux-console.net úthlutað breytunni tölva_nafn.

Ennfremur er gildinu 22 gefið breytunni port_no, það er líka hægt að úthluta gildi einnar breytu á aðra breytu eins og í síðasta dæmi þar sem við gáfum gildinu af tölva_nafn á breytuþjóninn.

Ef þú manst, strax frá hluta 2 af þessari Awk röð þar sem við fjallaðum um klippingu reits, ræddum við um hvernig Awk skiptir innsláttarlínum í reiti og notar staðlaða sviðsaðgangsstýrimann, $ til að lesa mismunandi reiti sem hafa verið greindar. Við getum líka notað breytur til að geyma gildi reita sem hér segir.

first_name=$2
second_name=$3

Í dæmunum hér að ofan er gildi fornafn stillt á annan reit og annan_nafn er stillt á þriðja reitinn.

Til dæmis, líttu á skrá sem heitir names.txt sem inniheldur lista yfir notendur forrits sem gefur til kynna fornöfn og eftirnöfn þeirra auk kyns. Með því að nota cat skipunina getum við skoðað innihald skráarinnar sem hér segir:

$ cat names.txt

Síðan getum við líka notað breyturnar first_name og second_name til að geyma fyrsta og annað nafn fyrsta notandans á listanum eins og með því að keyra Awk skipunina hér að neðan:

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

Við skulum líka skoða annað tilfelli, þegar þú gefur út skipunina uname -a á flugstöðinni þinni, prentar það út allar kerfisupplýsingarnar þínar.

Annar reiturinn inniheldur hýsingarheitið þitt, því getum við geymt hýsingarnafnið í breytu sem kallast hostname og prentað það með Awk eins og hér segir:

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

2. Töluorð

Í Awk eru tölulegar tjáningar smíðaðar með því að nota eftirfarandi talnaaðgerðir:

  1. * : margföldunaraðgerð
  2. +: samlagningarkerfi
  3. / : rekstraraðili deildar
  4. -: frádráttarvirki
  5. % : modulus operator
  6. ^ : veldisfallsoperator

Setningafræði fyrir tölulegar tjáningar er:

$ operand1 operator operand2

Í eyðublaðinu hér að ofan geta operand1 og operand2 verið tölur eða breytuheiti, og operand er hvaða rekstraraðili sem er hér að ofan.

Hér að neðan eru nokkur dæmi til að sýna hvernig á að búa til tölulegar tjáningar:

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

Til að skilja notkun talnasagna í Awk skulum við skoða eftirfarandi dæmi hér að neðan, með skránni domains.txt sem inniheldur öll lén í eigu 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

Til að skoða innihald skrárinnar, notaðu skipunina hér að neðan:

$ cat domains.txt

Ef við viljum telja fjölda skipta sem lénið linux-console.net birtist í skránni, getum við skrifað einfalda skriftu til að gera það á eftirfarandi hátt:

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

Eftir að hafa búið til handritið, vistaðu það og gerðu það keyranlegt, þegar við keyrum það með skránni, domains.txt sem inntak, fáum við eftirfarandi úttak:

$ ./script.sh  ~/domains.txt

Frá úttak skriftunnar eru 6 línur í skránni domains.txt sem innihalda linux-console.net, til að staðfesta að þú getir talið þær handvirkt.

3. Verkefnisstjórar

Síðasti Awk-eiginleikinn sem við munum fjalla um er úthlutanir, það eru nokkrir úthlutanir í Awk og þeir innihalda eftirfarandi:

  1. *= : margföldunarúthlutanir
  2. += : rekstraraðili fyrir samlagningarúthlutun
  3. /= : rekstraraðili deildarúthlutunar
  4. -= : rekstraraðili fyrir frádráttarúthlutun
  5. %= : úthlutunarstuðull
  6. ^= : veldisvísisúthlutunartæki

Einfaldasta setningafræði úthlutunaraðgerðar í Awk er sem hér segir:

$ variable_name=variable_name operator operand

Dæmi:

counter=0
counter=counter+1

num=20
num=num-1

Þú getur notað úthlutanir hér að ofan til að stytta úthlutunaraðgerðir í Awk, skoðaðu fyrri dæmin, við gætum framkvæmt verkefnið á eftirfarandi formi:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Þess vegna getum við breytt Awk skipuninni í skeljaforskriftinni sem við skrifuðum hér að ofan með því að nota += úthlutunaroperator sem hér segir:

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

Í þessum hluta Awk seríunnar fórum við yfir nokkra öfluga Awk eiginleika, það er breytur, að byggja upp tölulegar tjáningar og nota úthlutunaraðgerðir, auk nokkurra myndskreytinga um hvernig við getum raunverulega notað þær.

Þessi hugtök eru ekki frábrugðin því sem er í öðrum forritunarmálum en það gæti verið nokkur veruleg greinarmunur undir Awk forritun.

Í hluta 9 munum við skoða fleiri Awk eiginleika sem eru sérstök mynstur: BEGIN og END. Þangað til, vertu í sambandi við Tecmint.