Weboldal keresés

Külső program hívása az awk használatával


Bevezetés

Az Awk egy hatékony szövegfeldolgozó eszköz, amely különféle feladatok, például adatkezelés, szűrés és jelentéskészítés automatizálására használható. Az awk egyik érdekes tulajdonsága, hogy képes külső programokat meghívni a szkriptből. Ebben a cikkben megvizsgáljuk, hogyan hívhatunk külső programot az awk használatával.

A System() funkció megértése

A system() függvény külső parancsok végrehajtására szolgál az awk-n belül. a system() függvény szintaxisa a következő −

system(command)

A parancs argumentum egy külső parancs, amelyet végre akarunk hajtani. A system() függvény végrehajtásakor az awk parancs argumentumot ad át a shellnek a végrehajtáshoz. A shell ezután végrehajtja a parancsot, és visszaadja a kilépési állapotot awk-ra.

Külső program hívása

Egy külső program awk használatával történő meghívásához meg kell adnunk a parancsot, amelyet a system() függvény argumentumaként szeretnénk végrehajtani. Tegyük fel például, hogy egy awk parancsfájlból szeretnénk végrehajtani a dátum parancsot. Ezt a következőképpen tehetjük meg −

{ 
   system("date") 
}

Ebben a példában a date parancsot a system() függvény segítségével hívjuk meg. A parancsfájl végrehajtásakor a dátum parancs végrehajtásra kerül, és az aktuális dátum és idő megjelenik a képernyőn.

Bemenet átadása egy külső programnak

Külső programnak a system() függvény segítségével továbbíthatunk bemenetet. Tegyük fel például, hogy egy számlistát szeretnénk rendezni a sort paranccsal. Ezt a következőképpen tehetjük meg −

{ 
   print "3
1
2" | "sort" 
}

Ebben a példában a print utasítást használjuk számlista létrehozására (3, 1, 2). Ezután a cső szimbólumot (|) használjuk, hogy átadjuk ezt a számlistát a rendezés parancs bemeneteként. sort parancs, majd rendezi a számokat, és visszaadja az eredményt az awk-nak.

Külső program kimenetének tárolása

Egy külső program kimenetét a getline() függvény segítségével változóban tárolhatjuk. A getline() függvény egy bemeneti sor beolvasására szolgál fájlból vagy parancsból. A getline() függvény segítségével rögzíthetjük egy külső program kimenetét. Tegyük fel például, hogy egy változóban szeretnénk rögzíteni az ls parancs kimenetét. Ezt a következőképpen tehetjük meg −

{ 
   "ls" | getline output 
   print output 
}

Ebben a példában a system() függvényt használjuk az ls parancs végrehajtására. Ezután a getline() függvényt használjuk az ls parancs kimenetének rögzítésére a kimeneti változóban. Végül a print utasítást használjuk az ls parancs kimenetének megjelenítésére.

Érvek átadása egy külső programnak

A system() függvény segítségével argumentumokat adhatunk át egy külső programnak. Tegyük fel például, hogy egy karakterláncot szeretnénk nagybetűssé alakítani a tr paranccsal. Ezt a következőképpen tehetjük meg −

{ 
   str = "hello world" 
   cmd = "echo " str " | tr '[:lower:]' '[:upper:]'" 
   cmd | getline output 
   print output 
}

Ebben a példában az echo parancsot használjuk a "hello world" karakterlánc átadására a tr parancs bemeneteként. Ezután tr paranccsal alakítjuk át a karakterláncot nagybetűssé. Végül a getline() függvényt használjuk a tr parancs kimenetének rögzítésére a kimeneti változóban.

Kezelési hibák

Amikor egy külső programot awk használatával hívunk meg, fontos, hogy kezeljük a végrehajtás során előforduló hibákat. A system() függvény segítségével ellenőrizhetjük egy külső program kilépési állapotát. A kilépési állapot egy szám, amely a parancs sikerességét vagy sikertelenségét jelzi. A nulla érték a sikert, míg a nullától eltérő érték a sikertelenséget jelzi.

Tegyük fel például, hogy a test parancs segítségével szeretnénk ellenőrizni, hogy létezik-e fájl. Ezt a következőképpen tehetjük meg −

{ 
   file = "myfile.txt" 
   cmd = "test -e " file 
   if (system(cmd) != 0) { 
      print "File does not exist" 
   } else { 
      print "File exists" 
   } 
}

Ebben a példában a teszt parancsot használjuk annak ellenőrzésére, hogy létezik-e "sajátfájl.txt" fájl. Ezután a system() függvényt használjuk a tesztparancs végrehajtására. Ha a tesztparancs kilépési állapota nem nulla, akkor a "Fájl nem létezik" szöveget írjuk ki. Ellenkező esetben a "Fájl létezik" szöveget nyomtatjuk ki.

Speciális példák

  • Külső program kimenetének szűrése Egy külső program kimenetét az awk segítségével szűrhetjük. Tegyük fel például, hogy csak a ps parancs kimenetének első sorát szeretnénk megjeleníteni. Ezt a következőképpen tehetjük meg −

{ 
   cmd = "ps" 
   cmd | getline output 
   close(cmd) 
   split(output, lines, "
") 
   print lines[1] 
}

Ebben a példában a getline() függvényt használjuk a ps parancs kimenetének rögzítésére a kimeneti változóban. Ezután a split() függvényt használjuk a kimenet felosztására sorok tömbjére. Végül a print utasítást használjuk a kimenet első sorának megjelenítéséhez.

  • Az awk változók használata külső parancsokban Az awk változókat használhatjuk külső parancsokban. Tegyük fel például, hogy szeretnénk létrehozni egy fájlt egy változón alapuló névvel a touch paranccsal. Ezt a következőképpen tehetjük meg −

{ 
   filename = "myfile.txt" 
   cmd = "touch " filename 
   system(cmd) 
}

Ebben a példában a fájlnév változót használjuk a touch parancsban a "sajatfájl.txt" nevű fájl létrehozásához.

  • Az awk használata külső program kimenetének formázására Az awk segítségével formázhatjuk a külső program kimenetét. Tegyük fel például, hogy a df parancs kimenetét jobban olvasható formátumban szeretnénk megjeleníteni. Ezt a következőképpen tehetjük meg −

{ 
   cmd = "df -h" 
   cmd | getline output 
   close(cmd) 
   printf "%-20s%-10s%-10s%-10s%-10s%s
", "Filesystem", "Size", "Used", "Avail", "Use%", 
   "Mounted on" 
   split(output, lines, "
") 
   for (i=2; i<=length(lines); i++) { 
      printf "%-20s%-10s%-10s%-10s%-10s%s
", $1, $2, $3, $4, $5, $6 
   } 
}

Ebben a példában a printf utasítást használjuk a df parancs kimenetének formázására. Nyomtatunk egy fejlécsort oszlopfejlécekkel, majd a df parancs kimenetét, minden oszlopot rögzített szélességre igazítva.

Következtetés

Ebben a cikkben megvizsgáltuk, hogyan hívhatunk meg külső programot az awk használatával. Láttuk, hogyan lehet bemenetet átadni egy külső programnak, rögzíteni egy külső program kimenetét, és hogyan lehet kezelni a végrehajtás során előforduló hibákat. Az awk külső programhívási képességének felhasználásával különféle feladatokat automatizálhatunk, és hatékonyabbá és rugalmasabbá tehetjük szkriptjeinket.

Kapcsolódó cikkek: