Weboldal keresés

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:

  1. FILENAME: aktuális bemeneti fájlnév (ne változtassa meg a változó nevét)
  2. FR: az aktuális bemeneti sor száma (azaz 1., 2., 3. bemeneti sor… stb., ne változtassa meg a változó nevét)
  3. NF: mezők száma az aktuális beviteli sorban (ne változtassa meg a változó nevét)
  4. OFS: kimeneti mező elválasztó
  5. FS: beviteli mezőelválasztó
  6. ORS: kimeneti rekordelválasztó
  7. 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:

  1. az egyik módszer az FS beépített változó használata
  2. 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.