Weboldal keresés

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:

  1. változó_neve: az a név, amelyet a változónak adsz
  2. é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:

  1. * : szorzó operátor
  2. + : összeadás operátor
  3. / : osztás operátor
  4. - : kivonási operátor
  5. % : modulus operátor
  6. ^ : 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:

  1. *= : szorzás hozzárendelési operátor
  2. += : hozzárendelési operátor hozzáadása
  3. /= : osztás hozzárendelési operátor
  4. -= : kivonás hozzárendelési operátor
  5. %= : modulus hozzárendelési operátor
  6. ^= : 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.