Tgħallem Kif Uża Varjabbli Awk, Espressjonijiet Numeriċi u Operaturi tal-Assenjazzjoni - Parti 8


Is-serje ta 'kmand Awk qed issir eċċitanti nemmen, fis-seba' partijiet ta 'qabel, għaddejna minn xi punti fundamentali ta' Awk li għandek bżonn tikkontrolla biex tkun tista 'twettaq xi test bażiku jew filtrazzjoni ta' string fil-Linux.

Nibdew b'din il-parti, se nidħlu f'żoni bil-quddiem ta 'Awk biex nittrattaw operazzjonijiet ta' filtrazzjoni ta 'test jew string aktar kumplessi. Għalhekk, se nkopru karatteristiċi Awk bħal varjabbli, espressjonijiet numeriċi u operaturi ta 'assenjazzjoni.

Dawn il-kunċetti mhumiex b'mod komprensiv distinti minn dawk li forsi ltqajt magħhom f'ħafna lingwi ta' programmar qabel tali qoxra, C, Python flimkien ma' ħafna oħrajn, għalhekk m'hemmx għalfejn tinkwieta ħafna dwar dan is-suġġett, aħna sempliċement nirrevedu l-ideat komuni tal-użu. dawn il-karatteristiċi msemmija.

Din probabbilment se tkun waħda mit-taqsimiet tal-kmand Awk eħfef biex tifhem, għalhekk poġġi lura u ejja nibdew.

1. Varjabbli Awk

Fi kwalunkwe lingwa ta 'programmar, varjabbli hija detentur ta' post li jaħżen valur, meta toħloq varjabbli f'fajl tal-programm, hekk kif il-fajl jiġi esegwit, jinħoloq xi spazju fil-memorja li jaħżen il-valur li tispeċifika għall-varjabbli.

Tista' tiddefinixxi l-varjabbli Awk bl-istess mod li tiddefinixxi l-varjabbli tal-qoxra kif ġej:

variable_name=value 

Fis-sintassi hawn fuq:

  1. variable_name: huwa l-isem li tagħti varjabbli
  2. valur: il-valur maħżun fil-varjabbli

Ejja nħarsu lejn xi eżempji hawn taħt:

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

Agħti ħarsa lejn l-eżempji sempliċi hawn fuq, fl-ewwel definizzjoni varjabbli, il-valur linux-console.net huwa assenjat lill-varjabbli computer_name.

Barra minn hekk, il-valur 22 huwa assenjat lill-varjabbli port_no, huwa wkoll possibbli li jiġi assenjat il-valur ta 'varjabbli waħda għal varjabbli oħra bħal fl-aħħar eżempju fejn aħna assenjati l-valur ta' computer_name għas-server varjabbli.

Jekk tiftakar, sa mill-parti 2 ta’ din is-serje Awk fejn konna koperti l-editjar tal-kamp, tkellimna dwar kif Awk jaqsam il-linji tal-input f’oqsma u juża operatur ta’ aċċess għall-kamp standard, $ biex taqra l-oqsma differenti li ġew analizzati. Nistgħu wkoll nużaw varjabbli biex naħżnu l-valuri tal-oqsma kif ġej.

first_name=$2
second_name=$3

Fl-eżempji ta 'hawn fuq, il-valur ta' first_name huwa ssettjat għat-tieni qasam u second_name huwa ssettjat għat-tielet qasam.

Bħala eżempju, ikkunsidra fajl bl-isem names.txt li fih lista ta’ utenti ta’ applikazzjoni li jindikaw l-isem u l-kunjom tagħhom flimkien mal-ġeneru. Bl-użu tal-kmand tal-qtates, nistgħu naraw il-kontenut tal-fajl kif ġej:

$ cat names.txt

Imbagħad, nistgħu nużaw ukoll il-varjabbli first_name u second_name biex naħżnu l-ewwel u t-tieni ismijiet tal-ewwel utent fuq il-lista kif billi tħaddem il-kmand Awk hawn taħt:

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

Ejja nagħtu wkoll ħarsa lejn każ ieħor, meta toħroġ il-kmand uname -a fuq it-terminal tiegħek, dan jistampa l-informazzjoni kollha tas-sistema tiegħek.

It-tieni qasam fih hostname tiegħek, għalhekk nistgħu naħżnu l-hostname f'varjabbli msejħa hostname u nipprintjawha billi tuża Awk kif ġej:

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

2. Espressjonijiet Numeriċi

F'Awk, l-espressjonijiet numeriċi jinbnew bl-użu tal-operaturi numeriċi li ġejjin:

  1. * : operatur tal-multiplikazzjoni
  2. + : operatur ta’ żieda
  3. / : operatur tad-diviżjoni
  4. - : operatur tat-tnaqqis
  5. % : operatur tal-modulu
  6. ^ : operatur ta' esponenzjar

Is-sintassi għal espressjonijiet numeriċi hija:

$ operand1 operator operand2

Fil-forma ta' hawn fuq, operand1 u operand2 jistgħu jkunu numri jew ismijiet varjabbli, u operatur huwa kwalunkwe mill-operaturi ta' hawn fuq.

Hawn taħt hawn xi eżempji biex juru kif tibni espressjonijiet numeriċi:

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

Biex nifhmu l-użu ta' espressjonijiet numeriċi f'Awk, għandna nikkunsidraw l-eżempju li ġej hawn taħt, bil-fajl domains.txt li fih id-dominji kollha proprjetà ta' 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

Biex tara l-kontenut tal-fajl, uża l-kmand hawn taħt:

$ cat domains.txt

Jekk irridu ngħoddu n-numru ta' drabi li d-dominju linux-console.net jidher fil-fajl, nistgħu niktbu skript sempliċi biex nagħmlu dan kif ġej:

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

Wara li ħoloq l-iskript, issalvaha u għamilha eżekutibbli, meta nħaddmuh mal-fajl, domains.txt bħala input, aħna nġibu l-output li ġej:

$ ./script.sh  ~/domains.txt

Mill-output ta 'l-iskrittura, hemm 6 linji fil-fajl domains.txt li fihom linux-console.net, biex tikkonferma li tista' tgħoddhom manwalment.

3. Operaturi ta' Assenjament

L-aħħar karatteristika Awk li se nkopru hija l-operaturi tal-assenjazzjoni, hemm diversi operaturi tal-assenjazzjoni f'Awk u dawn jinkludu dan li ġej:

  1. *= : operatur tal-assenjazzjoni tal-multiplikazzjoni
  2. += : operatur ta' assenjazzjoni ta' żieda
  3. /= : operatur tal-assenjazzjoni tad-diviżjoni
  4. -= : operatur tal-assenjazzjoni tat-tnaqqis
  5. %= : operatur tal-assenjazzjoni tal-modulu
  6. ^= : operatur ta' assenjazzjoni ta' esponenzjali

L-aktar sintassi sempliċi ta 'operazzjoni ta' assenjazzjoni f'Awk hija kif ġej:

$ variable_name=variable_name operator operand

Eżempji:

counter=0
counter=counter+1

num=20
num=num-1

Tista 'tuża l-operaturi ta' assenjazzjoni ta 'hawn fuq biex tqassar l-operazzjonijiet ta' assenjazzjoni f'Awk, ikkunsidra l-eżempji preċedenti, nistgħu nwettqu l-inkarigu fil-forma li ġejja:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Għalhekk, nistgħu nbiddlu l-kmand Awk fl-iskrittura tal-qoxra li għadna kif ktibna hawn fuq billi tuża l-operatur ta 'assenjazzjoni += kif ġej:

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

F'dan is-segment tas-serje Awk, koprejna xi karatteristiċi qawwija ta 'Awk, jiġifieri varjabbli, nibnu espressjonijiet numeriċi u nużaw operaturi ta' assenjazzjoni, flimkien ma 'xi ftit illustrazzjonijiet ta' kif nistgħu fil-fatt nużawhom.

Dawn il-kunċetti mhumiex differenti minn dak f'lingwi ta' programmar oħra iżda jista' jkun hemm xi distinzjonijiet sinifikanti taħt l-ipprogrammar Awk.

Fil-parti 9, se nħarsu lejn aktar karatteristiċi Awk li huma mudelli speċjali: BEGIN u END. Sa dakinhar, ibqgħu konnessi ma' Tecmint.