Kọ ẹkọ Bii o ṣe le Lo Awọn oniyipada Awk, Awọn ifihan Nọmba ati Awọn oniṣẹ Ifiranṣẹ - Apá 8


Ọna aṣẹ Awk n ni igbadun Mo gbagbọ, ninu awọn ẹya meje ti tẹlẹ, a rin nipasẹ awọn ipilẹ pataki ti Awk ti o nilo lati ṣakoso lati jẹ ki o ṣe diẹ ninu ọrọ ipilẹ tabi sisẹ okun ni Linux.

Bibẹrẹ pẹlu apakan yii, a yoo sọ sinu awọn agbegbe ilosiwaju ti Awk lati mu ọrọ ti o nira sii tabi awọn iṣẹ sisẹ okun. Nitorinaa, a yoo bo awọn ẹya Awk gẹgẹbi awọn oniyipada, awọn ọrọ nọnba ati awọn oniṣẹ iṣẹ iyansilẹ.

Awọn imọran wọnyi kii ṣe iyatọ ni kikun si awọn eyiti o le ti jasi pade ni ọpọlọpọ awọn ede siseto ṣaaju iru ikarahun, C, Python pẹlu ọpọlọpọ awọn miiran, nitorinaa ko si ye lati ṣe aniyan pupọ nipa akọle yii, a n ṣe atunyẹwo awọn ero ti o wọpọ nipa lilo awọn wọnyi darukọ awọn ẹya ara ẹrọ.

Eyi yoo jasi jẹ ọkan ninu awọn apakan aṣẹ Awk rọọrun lati ni oye, nitorinaa joko sẹhin ki o jẹ ki o lọ.

1. Awari Awọn oniyipada

Ni eyikeyi ede siseto, oniyipada kan jẹ ohun ti o ni aye ti o tọju iye kan, nigbati o ba ṣẹda oniyipada kan ninu faili eto kan, bi a ṣe n ṣe faili naa, diẹ ninu aye ni a ṣẹda ninu iranti ti yoo tọju iye ti o sọ fun oniyipada naa.

O le ṣalaye awọn oniyipada Awk ni ọna kanna ti o ṣalaye awọn oniyipada ikarahun bi atẹle:

variable_name=value 

Ninu ilana ọrọ loke:

  1. ayípadà_name : ni orukọ ti o fun oniyipada kan
  2. iye : iye ti o fipamọ sinu oniyipada

Jẹ ki a wo awọn apẹẹrẹ diẹ ni isalẹ:

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

Wo awọn apẹẹrẹ ti o rọrun loke, ni asọye iyipada akọkọ, iye linux-console.net ni a sọtọ si oniyipada kọmputa_name .

Siwaju si, iye 22 ti wa ni sọtọ si oniyipada port_no , o tun ṣee ṣe lati fi iye ti oniyipada kan si oniyipada miiran bi ninu apẹẹrẹ ti o kẹhin ti a fi iye naa si ti orukọ kọnputa_ si olupin oniyipada.

Ti o ba le ranti, ni ọtun lati apakan 2 ti jara Awk yii ni a ti bo ṣiṣatunkọ aaye, a sọrọ nipa bii Awk ṣe pin awọn ila ifunni si awọn aaye ati lilo oniṣẹ ọna iraye si aaye, $ lati ka awọn aaye oriṣiriṣi ti ti wa ni itupalẹ. A tun le lo awọn oniyipada lati tọju awọn iye ti awọn aaye bi atẹle.

first_name=$2
second_name=$3

Ninu awọn apẹẹrẹ loke, iye ti first_name ti ṣeto si aaye keji ati pe keji_name ti ṣeto si aaye kẹta.

Gẹgẹbi apejuwe, ṣe akiyesi faili kan ti a npè ni names.txt eyiti o ni atokọ ti awọn olumulo ohun elo ti o n tọka awọn orukọ akọkọ ati ti ikẹhin wọn pẹlu akọ tabi abo. Lilo pipaṣẹ ologbo, a le wo awọn akoonu ti faili naa gẹgẹbi atẹle:

$ cat names.txt

Lẹhinna, a tun le lo awọn oniyipada first_name ati keji_name lati tọju awọn orukọ akọkọ ati keji ti olumulo akọkọ lori atokọ bi nipasẹ ṣiṣe aṣẹ Awk ni isalẹ:

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

Jẹ ki a tun wo ọran miiran, nigbati o ba fun ni aṣẹ uname -a lori ebute rẹ, o tẹ gbogbo alaye eto rẹ jade.

Aaye keji ni orukọ olupinle rẹ, nitorinaa a le tọju orukọ ile-iṣẹ ni oniyipada kan ti a pe ni hostname ki o tẹ sita ni lilo Awk gẹgẹbi atẹle:

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

2. Awọn ifihan Nọmba

Ni Awk, awọn itumọ nọmba jẹ itumọ ti lilo awọn oniṣẹ nọmba wọnyi:

  1. * : oniṣẹ isodipupo
  2. + : oluṣe afikun
  3. /: onišẹ pipin
  4. - : onišẹ iyokuro
  5. % : oluṣe modulus
  6. ^: oniṣẹ ẹrọ fifọ

Itọkasi fun awọn ọrọ nọnba ni:

$ operand1 operator operand2

Ni ọna ti o wa loke, operand1 ati operand2 le jẹ awọn nọmba tabi awọn orukọ oniyipada, ati pe oniṣẹ jẹ eyikeyi ti awọn oniṣẹ loke.

Ni isalẹ wa awọn apẹẹrẹ diẹ lati ṣe afihan bi o ṣe le kọ awọn ifihan nọmba:

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

Lati ni oye lilo awọn ifihan nọmba ni Awk, a yoo ṣe akiyesi apẹẹrẹ atẹle ni isalẹ, pẹlu faili domains.txt eyiti o ni gbogbo awọn ibugbe ti Tecmint jẹ.

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

Lati wo awọn akoonu ti faili naa, lo aṣẹ ni isalẹ:

$ cat domains.txt

Ti a ba fẹ lati ka iye awọn akoko ti ìkápá linux-console.net han ninu faili naa, a le kọ iwe afọwọkọ ti o rọrun lati ṣe iyẹn ni atẹle:

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

Lẹhin ṣiṣẹda iwe afọwọkọ, ṣafipamọ rẹ ki o jẹ ki o ṣiṣẹ, nigbati a ba ṣiṣẹ pẹlu faili naa, domains.txt bi igbewọle jade, a gba abajade ti nbọ yii:

$ ./script.sh  ~/domains.txt

Lati iṣẹjade ti iwe afọwọkọ naa, awọn ila 6 wa ninu faili domains.txt eyiti o ni linux-console.net , lati jẹrisi pe o le ka ọwọ pẹlu wọn.

3. Awọn oniṣẹ Ifiranṣẹ

Ẹya Awk ti o kẹhin ti a yoo bo ni awọn oniṣẹ iṣẹ iyansilẹ, awọn oniṣẹ iṣẹ iyansilẹ lọpọlọpọ wa ni Awk ati iwọnyi pẹlu atẹle wọnyi:

  1. * = : oniṣẹ iṣẹ iyansilẹ pupọ
  2. + = : oniṣẹ iṣẹ iyansilẹ afikun
  3. /= : onišẹ iṣẹ iyansilẹ pipin
  4. - = : iyokuro oṣiṣẹ iṣẹ iyansilẹ
  5. % = : oluṣe iṣẹ modulus
  6. ^= : onišẹ iṣẹ ipinnu fifinpin

Ilana ti o rọrun julọ ti iṣẹ iṣẹ iyansilẹ ni Awk jẹ atẹle wọnyi:

$ variable_name=variable_name operator operand

Awọn apẹẹrẹ:

counter=0
counter=counter+1

num=20
num=num-1

O le lo awọn oṣiṣẹ iṣẹ iyansilẹ loke lati kuru awọn iṣẹ iyansilẹ ni Awk, ṣe akiyesi awọn apẹẹrẹ iṣaaju, a le ṣe iṣẹ iyansilẹ ni fọọmu atẹle:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Nitorinaa, a le paarọ aṣẹ Awk ni iwe afọwọkọ ikarahun ti a kọ ni oke ni lilo + = onišẹ iṣẹ iyansilẹ bi atẹle:

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

Ninu apakan yii ti Awk jara, a bo diẹ ninu awọn ẹya Awk ti o ni agbara, iyẹn jẹ awọn oniyipada, kọ awọn ifihan nọmba ati lilo awọn oniṣẹ iṣẹ iyansilẹ, pẹlu diẹ ninu awọn apejuwe diẹ bi a ṣe le lo wọn niti gidi.

Awọn imọran wọnyi ko yatọ si ọkan ninu awọn ede siseto miiran ṣugbọn awọn iyatọ nla le wa labẹ siseto Awk.

Ni apakan 9, a yoo wo diẹ sii awọn ẹya Awk ti o jẹ awọn ilana pataki: Bẹrẹ ati END . Titi di igba naa, wa ni asopọ si Tecmint.


Gbogbo awọn Ẹtọ wa ni ipamọ. © Linux-Console.net • 2019-2024