Naučite se uporabljati spremenljivke Awk, numerične izraze in operaterje dodelitve - 8. del


Verjamem, da serija ukazov Awk postaja vznemirljiva, v prejšnjih sedmih delih smo se sprehodili po nekaterih osnovah programa Awk, ki jih morate obvladati, da boste lahko v Linuxu izvedli nekaj osnovnih filtriranja besedil ali nizov.

Začenši s tem delom, se bomo potopili v predhodna območja Awka, da bomo lahko obdelali bolj zapletene operacije filtriranja besedil ali nizov. Zato bomo zajeli funkcije Awk, kot so spremenljivke, številski izrazi in operaterji dodelitve.

Ti koncepti se ne razlikujejo v celoti od tistih, s katerimi ste se verjetno srečevali v mnogih programskih jezikih pred takšno lupino, C, Python in številnimi drugimi, zato se glede te teme ni treba veliko skrbeti, preprosto popravljamo običajne ideje te omenjene značilnosti.

To bo verjetno eden najlažjih razdelkov za ukaze v programu Awk, zato sedite in pustite, da gremo naprej.

1. Spremenljivke Awk

V katerem koli programskem jeziku je spremenljivka imetnik mesta, ki shrani vrednost. Ko ustvarite spremenljivko v programski datoteki, se med izvajanjem datoteke v pomnilniku ustvari nekaj prostora, ki bo shranil vrednost, ki ste jo določili za spremenljivko.

Spremenljivke Awk lahko definirate na enak način kot spremenljivke lupine, kot sledi:

variable_name=value 

V zgornji sintaksi:

  1. ime_spremenljivke : je ime, ki mu daste spremenljivko
  2. value : vrednost, shranjena v spremenljivki

Oglejmo si nekaj primerov spodaj:

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

Oglejte si zgornje preproste primere: v prvi definiciji spremenljivke je spremenljivki ime_računalnika dodeljena vrednost linux-console.net .

Poleg tega je vrednost 22 dodeljena spremenljivki port_no , vrednost ene spremenljivke pa je mogoče dodeliti tudi drugi spremenljivki, kot v zadnjem primeru, kjer smo dodelili vrednost ime_računalnika na spremenljivi strežnik.

Če se lahko spomnite, smo že od 2. dela te serije Awk pokrivali urejanje polj, govorili smo o tem, kako Awk deli vhodne vrstice na polja in uporablja standardni operater dostopa do polja, $, da prebere različna polja, ki so bili razčlenjeni. Spremenljivke lahko uporabimo tudi za shranjevanje vrednosti polj, kot sledi.

first_name=$2
second_name=$3

V zgornjih primerih je vrednost first_name nastavljena na drugo polje, second_name pa na tretje polje.

Za ponazoritev si oglejte datoteko z imenom names.txt , ki vsebuje seznam uporabnikov aplikacije, ki navaja njihova imena in priimke ter spol. Z uporabo ukaza cat si lahko vsebino datoteke ogledamo na naslednji način:

$ cat names.txt

Nato lahko spremenljivki first_name in second_name uporabimo tudi za shranjevanje prvega in drugega imena prvega uporabnika na seznam, tako da zaženemo spodnji ukaz Awk:

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

Oglejmo si še en primer, ko na terminalu izdate ukaz uname -a , ta izpiše vse podatke o vašem sistemu.

Drugo polje vsebuje vaše ime gostitelja , zato lahko ime gostitelja shranimo v spremenljivko z imenom ime gostitelja in ga z uporabo Awk natisnemo na naslednji način:

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

2. Številski izrazi

V Awk so numerični izrazi zgrajeni z uporabo naslednjih številskih operatorjev:

  1. * : operator množenja
  2. + : operator dodajanja
  3. /: operater delitve
  4. - : operator odštevanja
  5. % : operator modula
  6. ^: operator stopnjevanja

Sintaksa številskih izrazov je:

$ operand1 operator operand2

V zgornji obliki sta lahko operand1 in operand2 številki ali imeni spremenljivk, operator pa kateri koli od zgornjih operaterjev.

Spodaj je nekaj primerov, ki prikazujejo, kako zgraditi številske izraze:

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

Da bi razumeli uporabo številskih izrazov v programu Awk, bomo upoštevali spodnji primer z datoteko domains.txt , ki vsebuje vse domene v lasti Tecminta.

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

Če si želite ogledati vsebino datoteke, uporabite spodnji ukaz:

$ cat domains.txt

Če želimo prešteti, kolikokrat se v datoteki prikaže domena linux-console.net , lahko za to napišemo preprost skript:

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

Ko ustvarite skript, ga shranite in naredite izvedljiv, ko ga zaženemo z datoteko domains.txt kot izhodnim vhodom, dobimo naslednji izhod:

$ ./script.sh  ~/domains.txt

V izhodnem besedilu skripta je v datoteki domains.txt 6 vrstic, ki vsebujejo linux-console.net , kar potrjuje, da jih lahko ročno preštejete.

3. Operaterji dodelitve

Zadnja funkcija Awk, ki jo bomo obravnavali, je operaterji dodelitve, v Awk je več operaterjev dodelitve, ki vključujejo naslednje:

  1. * = : operator dodelitve množenja
  2. + = : operator dodeljevanja seštevanja
  3. /= : operater dodelitve delitve
  4. - = : operater dodelitve odštevanja
  5. % = : operater dodelitve modula
  6. ^= : operater dodelitve stopnjevanja

Najenostavnejša sintaksa operacije dodelitve v programu Awk je naslednja:

$ variable_name=variable_name operator operand

Primeri:

counter=0
counter=counter+1

num=20
num=num-1

Zgornje operaterje dodelitve lahko uporabite za skrajšanje operacij dodelitve v programu Awk, upoštevajte prejšnje primere, dodelitev bi lahko izvedli v naslednji obliki:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Zato lahko ukaz Awk v skriptu lupine, ki smo ga pravkar napisali, spremenimo z uporabo operaterja dodelitve + = , kot sledi:

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

V tem segmentu serije Awk smo zajeli nekaj zmogljivih funkcij Awk, to so spremenljivke, gradnjo številskih izrazov in uporabo operatorjev dodelitve ter nekaj ilustracij, kako jih lahko dejansko uporabimo.

Ti koncepti se sicer ne razlikujejo od tistih v drugih programskih jezikih, vendar lahko pri programiranju Awk obstajajo nekatere pomembne razlike.

V 9. delu si bomo ogledali več funkcij Awk, ki so posebni vzorci: BEGIN in END . Do takrat ostanite povezani s Tecmintom.