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:
-
ayípadà_name
: ni orukọ ti o fun oniyipada kan -
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:
-
* : oniṣẹ isodipupo
-
+
: oluṣe afikun -
/
: onišẹ pipin -
-
: onišẹ iyokuro -
%
: oluṣe modulus -
^
: 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:
-
* = : oniṣẹ iṣẹ iyansilẹ pupọ
-
+ = : oniṣẹ iṣẹ iyansilẹ afikun
-
/= : onišẹ iṣẹ iyansilẹ pipin
-
- = : iyokuro oṣiṣẹ iṣẹ iyansilẹ
-
% = : oluṣe iṣẹ modulus
-
^= : 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.