Linuxon az awk egy parancssori szövegmanipulációs dinamó, valamint egy erőteljes szkriptnyelv. Az alábbiakban bemutatjuk néhány legmenőbb funkcióját.
Milyen awk kapta a nevét
Az awk parancsot annak a három személynek a kezdőbetűivel nevezték el, akik 1977-ben írták az eredeti verziót: Alfred Aho, Weinberger Péter, és Brian Kernighan. Ez a három férfi a legendás világból származott AT&T Bell Laboratories Unix panteon. Azóta sokak közreműködésével az awk tovább fejlődött.
Ez egy teljes szkriptnyelv, valamint egy teljes szövegszerkesztő eszközkészlet a parancssorhoz. Ha ez a cikk felkelti az étvágyát, megteheti nézzen meg minden részletet az awk-ról és annak funkcióiról.
Szabályok, minták és műveletek
Az awk olyan programokon dolgozik, amelyek mintákból és műveletekből álló szabályokat tartalmaznak. A művelet a mintának megfelelő szövegen hajtódik végre. A minták göndör kapcsos zárójelek ({}) közé vannak zárva. Egy minta és egy cselekvés együtt alkot egy szabályt. A teljes awk program idézőjelek között (‘) van.
Vessünk egy pillantást az awk programok legegyszerűbb típusára. Nincs benne minta, így minden bele betáplált szövegsorhoz illeszkedik. Ez azt jelenti, hogy a művelet minden sorban végrehajtódik. Jól használja a kimeneten a ki parancsol.
Íme a standard kimenet, akitől:
who
Talán nincs szükségünk erre az összes információra, inkább csak szeretnénk látni a neveket a fiókokban. A who kimenetét átvezethetjük az awk-ba, majd megmondhatjuk az awk-nak, hogy csak az első mezőt írja ki.
Alapértelmezés szerint az awk a mezőt szóközzel, sor elején vagy sor végén lévő karaktersorozatnak tekinti. A mezőket egy dollárjel ($) és egy szám azonosítja. Tehát az $1 az első mezőt jelenti, amelyet a nyomtatási művelettel együtt használunk az első mező kinyomtatására.
A következőket írjuk be:
who | awk '{print $1}'
Az awk kiírja az első mezőt, és eldobja a sor többi részét.
Annyi mezőt nyomtathatunk, amennyit csak akarunk. Ha elválasztóként vesszőt adunk, az awk szóközt ír ki az egyes mezők közé.
A következőt írjuk be, hogy kinyomtassuk a személy bejelentkezésének idejét is (négyes mező):
who | awk '{print $1,$4}'
Van néhány speciális mezőazonosító. Ezek a teljes szövegsort és a szövegsor utolsó mezőjét jelentik:
$0: A teljes szövegsort jelöli.
$1: Az első mezőt jelöli.
$2: A második mezőt jelöli.
$7: A hetedik mezőt jelöli.
45 dollár: A 45. mezőt képviseli.
$NF: A „mezők száma” rövidítése, és az utolsó mezőt jelöli.
A következőket írjuk be, hogy előhívjunk egy kis szöveges fájlt, amely a következőhöz rendelt rövid idézetet tartalmaz Dennis Ritchie:
cat dennis_ritchie.txt
Azt akarjuk, hogy az awk kinyomtassa az idézet első, második és utolsó mezőjét. Ne feledje, hogy bár a terminálablakban körbe van burkolva, ez csak egyetlen szövegsor.
A következő parancsot írjuk be:
awk '{print $1,$2,$NF}' dennis_ritchie.txt
Nem ismerjük ezt az „egyszerűséget”. a 18. mező a szövegsorban, és nekünk mindegy. Tudjuk, hogy ez az utolsó mező, és a $NF segítségével megkaphatjuk az értékét. Az időszak csak egy másik karakternek számít a