Pagkat-on Unsaon Paggamit sa Awk Variables, Numeric Expressions ug Assignment Operators - Bahin 8


Ang serye sa Awk command nahimong kulbahinam sa akong pagtuo, sa miaging pito ka bahin, naglakaw kami sa pipila ka mga sukaranan sa Awk nga kinahanglan nimo nga ma-master aron makahimo ka sa pipila ka batakang pagsala sa teksto o string sa Linux.

Sugod sa niini nga bahin, kita mosalom sa mga abante nga mga dapit sa Awk aron pagdumala sa mas komplikado nga text o string filtering operations. Busa, atong tabonan ang mga feature sa Awk sama sa variables, numeric expressions ug assignment operators.

Kini nga mga konsepto dili komprehensibo nga lahi gikan sa mga tingali imong nasugatan sa daghang mga programming language sa wala pa ang ingon nga kabhang, C, Python ug uban pa, mao nga dili kinahanglan nga mabalaka pag-ayo bahin sa kini nga hilisgutan, gibag-o ra namon ang kasagarang mga ideya sa paggamit kining gihisgotan nga mga bahin.

Tingali kini usa sa labing sayon nga mga seksyon sa Awk command nga masabtan, busa lingkod ug lakaw.

1. Awk Variables

Sa bisan unsang programming language, ang variable kay usa ka place holder nga nagtipig ug value, kung maghimo ka ug variable sa usa ka program file, samtang ang file gipatuman, ang pipila ka space gihimo sa memorya nga magtipig sa bili nga imong gitakda para sa variable.

Mahimo nimong ipasabut ang mga variable sa Awk sa parehas nga paagi nga imong gipasabut ang mga variable sa shell sama sa mosunod:

variable_name=value 

Sa syntax sa ibabaw:

  1. variable_name: mao ang ngalan nga imong gihatag nga variable
  2. value: ang bili nga gitipigan sa variable

Atong tan-awon ang pipila ka mga pananglitan sa ubos:

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

Tan-awa ang yanong mga pananglitan sa ibabaw, sa unang variable definition, ang value linux-console.net gi-assign sa variable computer_name.

Dugang pa, ang kantidad nga 22 gi-assign sa variable port_no, posible usab nga i-assign ang bili sa usa ka variable ngadto sa lain nga variable sama sa katapusang pananglitan diin among gi-assign ang bili sa computer_name ngadto sa variable server.

Kung mahinumdoman nimo, gikan mismo sa bahin 2 niining serye sa Awk gisakupan namon ang pag-edit sa field, among gihisgutan kung giunsa pagbahin sa Awk ang mga linya sa input sa mga field ug gigamit ang standard field access operator, $ aron mabasa ang lainlaing mga field nga na-parse na. Mahimo usab natong gamiton ang mga variable aron tipigan ang mga bili sa mga natad sama sa mosunod.

first_name=$2
second_name=$3

Sa mga pananglitan sa ibabaw, ang bili sa first_name gibutang sa ikaduhang field ug second_name gibutang sa ikatulo nga field.

Isip usa ka ilustrasyon, hunahunaa ang usa ka file nga ginganlag name.txt nga adunay usa ka lista sa mga tiggamit sa aplikasyon nga nagpaila sa ilang una ug apelyido ug gender. Gamit ang cat command, mahimo natong tan-awon ang mga sulod sa file sama sa mosunod:

$ cat names.txt

Dayon, mahimo usab natong gamiton ang mga variable first_name ug second_name aron tipigan ang una ug ikaduhang ngalan sa unang user sa listahan sama sa pagpadagan sa Awk command sa ubos:

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

Atong tan-awon usab ang lain nga kaso, kung imong gi-isyu ang command uname -a sa imong terminal, kini nag-imprinta sa tanan nimong impormasyon sa sistema.

Ang ikaduhang field naglangkob sa imong hostname, busa mahimo namong tipigan ang hostname sa usa ka variable nga gitawag og hostname ug i-print kini gamit ang Awk ingon sa mosunod:

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

2. Numeric nga mga Ekspresyon

Sa Awk, ang mga numeric nga ekspresyon gihimo gamit ang mosunod nga mga numeric operators:

  1. * : multiplication operator
  2. + : operator sa pagdugang
  3. / : division operator
  4. - : subtraction operator
  5. % : modulus operator
  6. ^ : exponentiation operator

Ang syntax alang sa usa ka numeric nga ekspresyon mao ang:

$ operand1 operator operand2

Sa porma sa ibabaw, ang operand1 ug operand2 mahimong mga numero o variable nga ngalan, ug ang operator mao ang bisan kinsa sa mga operator sa ibabaw.

Sa ubos mao ang pipila ka mga pananglitan aron ipakita kung giunsa paghimo ang mga numeric nga ekspresyon:

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

Aron masabtan ang paggamit sa numeric nga mga ekspresyon sa Awk, atong tagdon ang mosunod nga pananglitan sa ubos, uban sa file domains.txt nga naglangkob sa tanang domain nga gipanag-iya sa 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

Aron makita ang sulod sa file, gamita ang sugo sa ubos:

$ cat domains.txt

Kung gusto namong ihap ang gidaghanon sa mga higayon nga makita ang domain linux-console.net sa file, makasulat mi og simple nga script para buhaton kana sama sa mosunod:

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

Human sa paghimo sa script, i-save kini ug himoa kini nga ma-executable, kung atong ipadagan kini gamit ang file, domains.txt isip out input, makuha nato ang mosunod nga output:

$ ./script.sh  ~/domains.txt

Gikan sa output sa script, adunay 6 ka linya sa file domains.txt nga adunay linux-console.net, aron makumpirma nga mahimo nimo kini nga ihap sa mano-mano.

3. Mga Operator sa Assignment

Ang katapusan nga bahin sa Awk nga atong tabonan mao ang mga operator sa assignment, adunay daghang mga operator sa assignment sa Awk ug kini naglakip sa mosunod:

  1. *= : multiplication assignment operator
  2. += : dugang nga assignment operator
  3. /= : division assignment operator
  4. -= : subtraction assignment operator
  5. %= : modulus assignment operator
  6. ^= : exponentiation assignment operator

Ang pinakasimple nga syntax sa usa ka assignment nga operasyon sa Awk mao ang mosunod:

$ variable_name=variable_name operator operand

Mga pananglitan:

counter=0
counter=counter+1

num=20
num=num-1

Mahimo nimong gamiton ang mga operator sa assignment sa ibabaw aron mub-on ang mga operasyon sa assignment sa Awk, ikonsiderar ang nangaging mga pananglitan, mahimo namong buhaton ang assignment sa mosunod nga porma:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Busa, mahimo natong usbon ang Awk command sa shell script nga bag-o lang natong gisulat sa ibabaw gamit ang += assignment operator sama sa mosunod:

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

Niini nga bahin sa serye sa Awk, among gitabonan ang pipila ka gamhanan nga mga feature sa Awk, nga mao ang mga variable, paghimo og numeric nga mga ekspresyon ug paggamit sa mga operator sa assignment, dugang sa pipila ka mga ilustrasyon kung unsaon namo kini sa aktwal nga paggamit.

Kini nga mga konsepto wala'y kalainan sa usa sa ubang mga programming language apan adunay pipila ka mahinungdanong mga kalainan ubos sa Awk programming.

Sa bahin 9, atong tan-awon ang dugang nga mga feature sa Awk nga espesyal nga mga pattern: BEGIN ug END. Hangtud niana, magpabilin nga konektado sa Tecmint.