Sužinokite, kaip naudoti Awk kintamuosius, skaitines išraiškas ir priskyrimo operatorius – 8 dalis


Awk komandų serija darosi įdomi, manau, ankstesnėse septyniose dalyse apžvelgėme kai kuriuos Awk pagrindus, kuriuos turite išmokti, kad galėtumėte atlikti pagrindinį teksto ar eilučių filtravimą sistemoje „Linux“.

Pradėdami nuo šios dalies, pasinersime į išankstines Awk sritis, kad galėtume atlikti sudėtingesnes teksto ar eilučių filtravimo operacijas. Todėl apžvelgsime Awk funkcijas, tokias kaip kintamieji, skaitinės išraiškos ir priskyrimo operatoriai.

Šios sąvokos nėra visiškai skirtingos nuo tų, su kuriomis tikriausiai susidūrėte daugelyje programavimo kalbų prieš tokį apvalkalą, C, Python ir daugelį kitų, todėl nereikia daug rūpintis šia tema, mes tiesiog peržiūrime įprastas naudojimo idėjas. šias paminėtas savybes.

Tai tikriausiai bus viena iš lengviausiai suprantamų Awk komandų skyrių, todėl atsisėskite ir kibkite.

1. Awk kintamieji

Bet kurioje programavimo kalboje kintamasis yra vietos rezervuaras, kuriame saugoma reikšmė. Kai sukuriate kintamąjį programos faile, kai failas vykdomas, atmintyje sukuriama vietos, kurioje bus saugoma jūsų nurodyta kintamojo reikšmė.

Galite apibrėžti Awk kintamuosius taip pat, kaip apibrėžiate apvalkalo kintamuosius, kaip nurodyta toliau:

variable_name=value 

Aukščiau pateiktoje sintaksėje:

  1. kintamojo_pavadinimas: yra pavadinimas, kurį suteikiate kintamajam
  2. reikšmė: kintamajame saugoma reikšmė

Pažvelkime į keletą toliau pateiktų pavyzdžių:

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

Pažvelkite į aukščiau pateiktus paprastus pavyzdžius. Pirmajame kintamojo apibrėžime reikšmė linux-console.net priskiriama kintamajam kompiuterio_pavadinimas.

Be to, reikšmė 22 priskiriama kintamajam port_no, taip pat galima priskirti vieno kintamojo reikšmę kitam kintamajam, kaip ir paskutiniame pavyzdyje, kur mes priskyrėme reikšmę kompiuterio_pavadinimas į kintamąjį serverį.

Jei prisimenate, nuo 2 šios „Awk“ serijos dalies, kurioje aptarėme lauko redagavimą, kalbėjome apie tai, kaip „Awk“ padalija įvesties eilutes į laukus ir naudoja standartinį lauko prieigos operatorių $, kad perskaitytų skirtingus laukus buvo išanalizuoti. Taip pat galime naudoti kintamuosius, norėdami išsaugoti laukų reikšmes, kaip nurodyta toliau.

first_name=$2
second_name=$3

Anksčiau pateiktuose pavyzdžiuose first_name reikšmė nustatyta į antrą lauką, o second_name – į trečią lauką.

Kaip iliustraciją apsvarstykite failą pavadinimu vardai.txt, kuriame yra programos naudotojų sąrašas, nurodant jų vardą ir pavardę bei lytį. Naudodami komandą cat, galime peržiūrėti failo turinį taip:

cat names.txt

Tada taip pat galime naudoti kintamuosius first_name ir antras_vardas, kad išsaugotume pirmojo ir antrojo sąrašo vartotojo vardus, pvz., paleisdami Awk > komanda žemiau:

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

Taip pat pažvelkime į kitą atvejį, kai terminale išduodate komandą uname -a, ji išspausdina visą sistemos informaciją.

Antrame lauke yra jūsų hostname, todėl galime išsaugoti hostname kintamajame, pavadintame hostname ir išspausdinti naudodami Awk > taip:

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

2. Skaitmeninės išraiškos

Awk skaitinės išraiškos kuriamos naudojant šiuos skaitinius operatorius:

  1. * : daugybos operatorius
  2. + : pridėjimo operatorius
  3. / : padalijimo operatorius
  4. - : atimties operatorius
  5. % : modulio operatorius
  6. ^ : eksponencijos operatorius

Skaitinių išraiškų sintaksė yra tokia:

operand1 operator operand2

Aukščiau pateiktoje formoje operand1 ir operand2 gali būti skaičiai arba kintamųjų pavadinimai, o operatorius yra bet kuris iš anksčiau nurodytų operatorių.

Toliau pateikiami keli skaitinių išraiškų kūrimo pavyzdžiai:

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

Norėdami suprasti skaitinių išraiškų naudojimą Awk, apsvarstysime toliau pateiktą pavyzdį su failu domains.txt, kuriame yra visi Tecmint priklausantys domenai..

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

Norėdami peržiūrėti failo turinį, naudokite toliau pateiktą komandą:

cat domains.txt

Jei norime suskaičiuoti, kiek kartų faile rodomas domenas linux-console.net, galime parašyti paprastą scenarijų, kaip tai padaryti:

#!/bin/bash
for file in $@; 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

Sukūrę scenarijų, išsaugokite jį ir padarykite jį vykdomąjį, kai paleidžiame jį naudodami failą domains.txt kaip išvesties įvestį, gauname tokią išvestį:

./script.sh  ~/domains.txt

Iš scenarijaus išvesties faile domains.txt yra 6 eilutės, kuriose yra linux-console.net, patvirtinančios, kad galite jas skaičiuoti rankiniu būdu.

3. Priskyrimo operatoriai

Paskutinė Awk funkcija, kurią apžvelgsime, yra priskyrimo operatoriai, Awk yra keletas priskyrimo operatorių, įskaitant šiuos:

  1. *= : daugybos priskyrimo operatorius
  2. += : pridėjimo priskyrimo operatorius
  3. /= : padalijimo priskyrimo operatorius
  4. -= : atimties priskyrimo operatorius
  5. %= : modulio priskyrimo operatorius
  6. ^= : eksponencijos priskyrimo operatorius

Paprasčiausia priskyrimo operacijos sintaksė Awk yra tokia:

variable_name=variable_name operator operand

Pavyzdžiai:

counter=0
counter=counter+1

num=20
num=num-1

Galite naudoti anksčiau pateiktus priskyrimo operatorius, kad sutrumpintumėte priskyrimo operacijas Awk, apsvarstykite ankstesnius pavyzdžius, mes galėtume atlikti priskyrimą tokia forma:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Todėl galime pakeisti komandą Awk apvalkalo scenarijuje, kurį ką tik parašėme aukščiau, naudodami priskyrimo operatorių += taip:

#!/bin/bash
for file in $@; 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

Šiame Awk serijos segmente apžvelgėme kai kurias galingas Awk funkcijas, ty kintamuosius, skaitmeninių išraiškų kūrimą ir priskyrimo operatorių naudojimą, taip pat keletą iliustracijų, kaip galime jas iš tikrųjų naudoti.

Šios sąvokos niekuo nesiskiria nuo kitų programavimo kalbų, tačiau Awk programavimas gali turėti reikšmingų skirtumų.

9 dalyje apžvelgsime daugiau Awk funkcijų, kurios yra specialūs šablonai: BEGIN ir END. Iki tol palaikykite ryšį su Tecmint.