Ismerje meg az Awk beépített változók használatát – 10. rész
Ahogy feltárjuk az Awk funkciók szakaszát, a sorozatnak ebben a részében végigvezetjük az Awk beépített változóinak koncepcióját. Az Awk-ban kétféle változót használhatsz, ezek a következők; felhasználó által definiált változók, amelyekkel a 8. részben foglalkoztunk, valamint a beépített változók.
A beépített változóknak már definiált értékei vannak az Awk-ban, de ezeket az értékeket óvatosan is módosíthatjuk. A beépített változók a következők:
FILENAME
: aktuális bemeneti fájlnév (ne változtassa meg a változó nevét)FR
: az aktuális bemeneti sor száma (azaz 1., 2., 3. bemeneti sor… stb., ne változtassa meg a változó nevét)NF
: mezők száma az aktuális beviteli sorban (ne változtassa meg a változó nevét)OFS
: kimeneti mező elválasztóFS
: beviteli mezőelválasztóORS
: kimeneti rekordelválasztóRS
: bemeneti rekordelválasztó
Folytassuk az Awk néhány beépített változó használatának szemléltetésével a fentiekben:
Az aktuális bemeneti fájl fájlnevének olvasásához használhatja a FILENAME
beépített változót az alábbiak szerint:
awk ' { print FILENAME } ' ~/domains.txt
Tudni fogja, hogy a fájlnév minden beviteli sorhoz kinyomtatásra kerül, ez az Awk alapértelmezett viselkedése, ha a FILENAME
beépített változót használja.
Az NR
használatával megszámolja a sorok (rekordok) számát egy bemeneti fájlban, ne feledje, hogy az üres sorokat is számolja, amint azt az alábbi példában látni fogjuk.
Amikor a domains.txt fájlt cat paranccsal tekintjük meg, az 14 szöveges sort és üres 2 sort tartalmaz:
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
Egy rekordban vagy sorban lévő mezők számának megszámlálásához az NR beépített változót használjuk a következők szerint:
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Ezután megadhat egy beviteli mezőelválasztót is a beépített FS
változó használatával, amely meghatározza, hogy az Awk hogyan osztja fel a beviteli sorokat mezőkre.
Az FS
alapértelmezett értéke a szóköz és a tab, de az FS
értékét bármilyen karakterre módosíthatjuk, utasítja az Awk-t, hogy ennek megfelelően ossza fel a bemeneti sorokat.
Ennek két módja van:
- az egyik módszer az FS beépített változó használata
- a második pedig az -F Awk opció meghívása
Tekintsük az /etc/passwd fájlt Linux rendszeren, a fájl mezői a :
karakterrel vannak felosztva, így megadhatjuk új beviteli mezőelválasztóként, amikor bizonyos mezőket ki szeretnénk szűrni, mint az alábbi példákban:
A -F
opciót a következőképpen használhatjuk:
awk -F':' '{ print $1, $4 ;}' /etc/passwd
Opcionálisan kihasználhatjuk az FS
beépített változó előnyeit is, az alábbiak szerint:
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Kimeneti mező-elválasztó megadásához használja a beépített OFS
változót, amely meghatározza, hogy a kimeneti mezők hogyan legyenek elválasztva az alábbi példában használt karakter használatával:
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
Ebben a 10. részben megvizsgáltuk az előre meghatározott értékekkel rendelkező Awk beépített változók használatának ötletét. De ezeket az értékeket is megváltoztathatjuk, de nem ajánlott ezt megtenni, hacsak nem tudja, mit csinál, megfelelő megértéssel.
Ezt követően tovább fogunk foglalkozni azzal, hogyan használhatjuk a shell-változókat az Awk parancsműveletekben, ezért maradjunk kapcsolatban a Tecminttel.