AWK (tsz. AWKs)
Az AWK nyelvet eredetileg Alfred Aho, Peter Weinberger és Brian Kernighan fejlesztette ki a Bell Laboratóriumokban, és a nevét alkotóinak kezdőbetűiről kapta (Aho, Weinberger, Kernighan). Az AWK a mintákhoz kapcsolt akciók nyelvi modelljét használja: a bemeneti szöveg különböző részeire (például sorokra vagy mezőkre) alkalmazhatunk mintákat, és ha egy minta illeszkedik, akkor végrehajtjuk a hozzá kapcsolt akciókat.
$1
, $2
, stb. változók használatával, míg az aktuális sor az egészében a $0
változóval érhető el.
Az AWK egy Unix/Linux parancs, amelyet a parancssorban lehet használni. Az AWK kódot háromféleképpen lehet megadni:
Egyszerű parancssorból:
Példa:
awk '{ print $1 }' fájl.txt
Ez a parancs az adott fájl minden sorának első mezőjét fogja kinyomtatni.
Külső szkripttel:
Beágyazva shell-szkriptekbe:
Az AWK programok alapvetően három részre oszthatók: BEGIN, minta-akció, és END blokkokra.
Példa egy egyszerű AWK programra:
awk 'BEGIN { print "Field 1, Field 2" } { print $1, $2 } END { print "Done" }' fájl.txt
Ez a program az alábbiakat hajtja végre: - BEGIN blokk: Nyomtat egy fejlécet. - Minta-akció blokk: Minden sor első és második mezőjét kiírja. - END blokk: A végén kinyomtatja a „Done” szót.
Az alábbi parancs az első és második mezőt nyomtatja ki egy fájlból:
awk '{ print $1, $2 }' fájl.txt
Ha a fájl nem szóközzel vagy tabulátorral van elválasztva, például vesszővel elválasztott CSV-fájl esetén, az -F
opcióval állíthatjuk be az elválasztó karaktert.
Például egy CSV fájl esetén:
awk -F "," '{ print $1, $2 }' fájl.csv
Ez a parancs a CSV fájl első és második mezőjét nyomtatja ki.
Az AWK lehetőséget biztosít sorok szűrésére egy minta alapján. Például az alábbi parancs csak azokat a sorokat nyomtatja ki, amelyek a „Linux” szót tartalmazzák:
awk '/Linux/ { print }' fájl.txt
AWK-ban számtani műveleteket is végezhetünk. Például az alábbi parancs kiszámítja az egyes sorok második és harmadik mezőjének összegét:
awk '{ sum = $2 + $3; print sum }' fájl.txt
Az AWK gyakran használható összesítésre. Például az alábbi parancs kiszámítja egy fájl második mezőjének összegét:
awk '{ total += $2 } END { print total }' fájl.txt
Ez a program minden sor második mezőjét hozzáadja a total változóhoz, majd a fájl végén kinyomtatja a végeredményt.
AWK-ban számos beépített változó van, amelyek segítségével további információkat nyerhetünk ki a fájlból vagy módosíthatjuk az adatfeldolgozás módját:
NR
: Az aktuális sor sorszáma.NF
: Az aktuális sor mezőinek száma.FS
: A mezők elválasztó karaktere (alapértelmezett: szóköz).OFS
: Az output mező elválasztó karaktere (alapértelmezett: szóköz).RS
: A sorok elválasztó karaktere (alapértelmezett: újsor karakter).Példa a sorszámok kiírására:
awk '{ print NR, $0 }' fájl.txt
Ez minden sor előtt kiírja annak sorszámát.
Az alábbi példa egy fájlban lévő második oszlop átlagát számolja ki:
awk '{ sum += $2 } END { print "Average:", sum/NR }' fájl.txt
Ez a parancs összeadja az összes második oszlopban lévő értéket, majd a sorok számával elosztva kiírja az átlagot.
Az AWK képes két fájl összehasonlítására és közös sorok keresésére. Például:
awk 'NR==FNR { a; next }
$1 in a' fájl1.txt fájl2.txt
Ez a parancs összehasonlítja az első fájl és a második fájl első mezőit, és csak azokat a sorokat írja ki a második fájlból, amelyek első mezője megtalálható az első fájlban.
Az AWK egy hatékony és sokoldalú eszköz, amely kiválóan alkalmas szöveges fájlok feldolgozására, különösen ha strukturált adatokkal dolgozunk. A beépített minta-akció modell és a reguláris kifejezések támogatása miatt az AWK gyors és egyszerű megoldást kínál sok gyakori adatfeldolgozási feladatra, mint például a sorok szűrése, mezők manipulálása vagy összesítése.