Ismerje meg az Awk-változók, numerikus kifejezések és hozzárendelési operátorok használatát – 8. rész
Az Awk parancssorozat kezd izgalmassá válni, úgy gondolom, hogy az előző hét részben végigmentünk az Awk néhány alapvetésén, amelyeket el kell sajátítanunk ahhoz, hogy alapvető szöveg- vagy karakterlánc-szűrést végezhessenek Linuxon.
Ettől a résztől kezdve az Awk speciális területeibe fogunk belemerülni az összetettebb szöveg- vagy karakterlánc-szűrési műveletek kezeléséhez. Ezért foglalkozunk az Awk szolgáltatásokkal, például változókkal, numerikus kifejezésekkel és hozzárendelési operátorokkal.
Ezek a fogalmak nem különböznek teljesen azoktól, amelyekkel valószínűleg sok programozási nyelvben találkozhattak az ilyen shell, C, Python és még sok más előtt, így nem kell sokat foglalkozni ezzel a témával, egyszerűen áttekintjük a használat általános elképzeléseit. ezeket az említett jellemzőket.
Valószínűleg ez lesz az egyik legkönnyebben megérthető Awk parancsrész, úgyhogy dőljön hátra, és indulhat.
1. Awk változók
Bármely programozási nyelvben a változó egy helyőrző, amely értéket tárol. Amikor változót hoz létre egy programfájlban, a fájl végrehajtása közben keletkezik egy kis hely a memóriában, amely tárolja a változóhoz megadott értéket.
Az Awk változókat ugyanúgy definiálhatja, mint a shell-változókat az alábbiak szerint:
variable_name=value
A fenti szintaxisban:
változó_neve
: az a név, amelyet a változónak adszérték
: a változóban tárolt érték
Nézzünk néhány példát az alábbiakban:
computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”
Vessen egy pillantást a fenti egyszerű példákra, az első változódefinícióban a linux-console.net
érték a számítógép_neve
változóhoz van rendelve.
Továbbá a 22
érték hozzá van rendelve a port_no
változóhoz, és lehetőség van egy változó értékét egy másik változóhoz is hozzárendelni, mint az utolsó példában, ahol az értéket adtuk. a számítógép_neve
-ból a változókiszolgálóra.
Ha emlékszel, ennek az Awk-sorozatnak a 2. részétől kezdve, ahol foglalkoztunk a mezőszerkesztéssel, arról beszéltünk, hogy az Awk hogyan osztja mezőkre a bemeneti sorokat, és a szabványos mezőelérési operátort, a $
-t használja a különböző mezők olvasásához. elemeztek. Változókat is használhatunk a mezők értékeinek tárolására az alábbiak szerint.
first_name=$2
second_name=$3
A fenti példákban a first_name
értéke a második mezőre, a second_name
pedig a harmadik mezőre van állítva.
Példaként tekintsünk egy names.txt
nevű fájlt, amely egy alkalmazás felhasználóinak listáját tartalmazza a vezeték- és utónevükkel, valamint a nemükkel. A cat paranccsal a következőképpen tekinthetjük meg a fájl tartalmát:
cat names.txt
Ezután a first_name
és second_name
változókat is használhatjuk a listán szereplő első felhasználó első és második nevének tárolására, például az Awk futtatásával. > parancs alább:
awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
Vessünk egy pillantást egy másik esetre is, amikor kiadja az uname -a
parancsot a terminálján, az kiírja az összes rendszerinformációt.
A második mező tartalmazza az Ön hostname
-ját, ezért tárolhatjuk a hostname-t egy hostname
nevű változóban, és kinyomtathatjuk az Awk segítségével. > a következőképpen:
uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }'
2. Numerikus kifejezések
Az Awk programban a numerikus kifejezések a következő numerikus operátorok használatával készülnek:
*
: szorzó operátor+
: összeadás operátor/
: osztás operátor-
: kivonási operátor%
: modulus operátor^
: hatványozási operátor
A numerikus kifejezések szintaxisa a következő:
operand1 operator operand2
A fenti formában az operand1
és az operand2
lehetnek számok vagy változónevek, az operator
pedig a fenti operátorok bármelyike.
Az alábbiakban néhány példa bemutatja a numerikus kifejezések létrehozását:
counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1
Az Awk numerikus kifejezések használatának megértéséhez az alábbi példát vegyük figyelembe a domains.txt
fájllal, amely a Tecmint tulajdonában lévő összes domaint tartalmazza..
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
A fájl tartalmának megtekintéséhez használja az alábbi parancsot:
cat domains.txt
Ha meg akarjuk számolni, hogy a linux-console.net
domain hányszor jelenik meg a fájlban, akkor írhatunk egy egyszerű szkriptet a következőképpen:
#!/bin/bash
for file in $@; 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
A szkript létrehozása után mentsük el és tegyük végrehajthatóvá, amikor a domains.txt
fájllal futtatjuk kimenetként, a következő kimenetet kapjuk:
./script.sh ~/domains.txt
A szkript kimenetéből 6 sor található a domains.txt
fájlban, amelyek a linux-console.net
elemet tartalmazzák, annak megerősítésére, hogy ezeket manuálisan meg tudja számolni.
3. Hozzárendelés operátorok
Az utolsó Awk funkció, amellyel foglalkozni fogunk, a hozzárendelési operátorok, az Awk-ban számos hozzárendelési operátor található, és ezek a következők:
*=
: szorzás hozzárendelési operátor+=
: hozzárendelési operátor hozzáadása/=
: osztás hozzárendelési operátor-=
: kivonás hozzárendelési operátor%=
: modulus hozzárendelési operátor^=
: hatványozás hozzárendelési operátora
Az Awk hozzárendelési műveleteinek legegyszerűbb szintaxisa a következő:
variable_name=variable_name operator operand
Példák:
counter=0
counter=counter+1
num=20
num=num-1
A fenti hozzárendelési operátorokkal lerövidítheti a hozzárendelési műveleteket az Awkban, vegye figyelembe az előző példákat, a hozzárendelést a következő formában hajthatjuk végre:
variable_name operator=operand
counter=0
counter+=1
num=20
num-=1
Ezért módosíthatjuk az Awk parancsot a fent írt shell szkriptben a +=
hozzárendelési operátor használatával a következőképpen:
#!/bin/bash
for file in $@; 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
Az Awk sorozatnak ebben a szegmensében bemutattunk néhány hatékony Awk funkciót, azaz a változókat, a numerikus kifejezések létrehozását és a hozzárendelési operátorok használatát, valamint néhány szemléltetést arról, hogyan is használhatjuk őket.
Ezek a fogalmak semmiben sem különböznek a többi programozási nyelvtől, de lehetnek jelentős különbségek az Awk programozásban.
A 9. részben további Awk funkciókat fogunk megvizsgálni, amelyek speciális minták: BEGIN
és END
. Addig is maradjon kapcsolatban a Tecminttel.