Awk is a scripting language used for manipulating data and generating reports.Az awk parancs programozási nyelv Nem igényel összeállítást, és lehetővé teszi a felhasználó számára, hogy változókat, numerikus függvényeket, karakterláncfüggvényeket, logikai operátorokat használjon.
az Awk egy olyan segédprogram, amely lehetővé teszi a programozó számára, hogy apró, de hatékony programokat írjon olyan kijelentések formájában, amelyek meghatározzák a dokumentum minden sorában keresendő szövegmintákat, valamint azt a műveletet, amelyet akkor kell megtenni, ha egy sort egy sorban talál., Az Awk-t leginkább a minta szkennelésére és feldolgozására használják. Egy vagy több fájlt keres, hogy megnézze, tartalmaznak-e sorokat, amelyek megfelelnek a megadott mintáknak, majd végrehajtja a kapcsolódó műveleteket.
az Awk rövidítése a fejlesztők nevéből – Aho, Weinberger és Kernighan.
mit tehetünk az AWK-val ?
1. AWK műveletek:
(a) beolvassa a fájl sort sor
(b) osztja minden bemeneti sor mezőkbe
(c) összehasonlítja a bemeneti sort/mezőket minta
(d) végez művelet (ek) a kiegyenlített vonalak
2., Hasznos:
(a) adatfájlok átalakítása
(b) formázott jelentések készítése
3. Programozási konstrukciók:
(a) Format output lines
(b) aritmetikai és string operations
(c) Conditionals and loops
szintaxis:
Options:
Minta parancsok
példa:
vegye figyelembe a következőket szöveges fájl, mint a bemeneti fájl az összes alábbi esetben.
$cat > employee.txt
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
1. Az Awk alapértelmezett viselkedése: az Awk alapértelmezés szerint minden adatsort kinyomtat a megadott fájlból.,
$ awk '{print}' employee.txt
kimenet:
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
a fenti példában nincs minta megadva. Tehát a műveletek minden sorra vonatkoznak. Action print argumentum nélkül alapértelmezés szerint kiírja az egész sort, így hiba nélkül kiírja a fájl összes sorát.
2. Nyomtassa ki azokat a sorokat, amelyek megfelelnek az adott mintának.
$ awk '/manager/ {print}' employee.txt
kimenet:
ajay manager account 45000varun manager sales 50000amit manager account 47000
a fenti példában az awk parancs kiírja az összes sort, amely megegyezik a “manager” – el.
3., Sor felosztása mezőkre : az awk parancs alapértelmezés szerint felosztja a whitespace karakter által határolt rekordot, majd a $n változókban tárolja. Ha a sornak 4 szava van, akkor az 1, 2, 3, illetve 4 dollárban kerül tárolásra. Továbbá, $0 képviseli az egész sort.
$ awk '{print $1,$4}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
a fenti példában az 1 $és a 4 $a név és a fizetés mezőket jelöli.,
beépített változók Awk
Awk beépített változók közé tartoznak a mező változók—$1, $2, $3, és így tovább ($0 az egész sor) – ez megtöri a szövegsort egyes szavakra vagy mezőknek nevezett darabokra.
NR:az NR parancs a bemeneti rekordok számának aktuális számát tartja. Ne feledje, hogy a rekordok általában vonalak. Awk parancs végrehajtja a minta / művelet nyilatkozatok egyszer minden rekordot egy fájlban.
NF:NF parancs tartja száma a mezők száma az aktuális bemeneti rekord.,
FS: az FS parancs tartalmazza a mezőelválasztó karaktert, amelyet a beviteli sorban lévő mezők megosztására használnak. Az alapértelmezett érték a “fehér tér”, ami szóközt és tab karaktereket jelent. Az FS áthelyezhető egy másik karakterre (általában a kezdőben) a mező elválasztó megváltoztatásához.
RS: RS parancs tárolja az aktuális rekord elválasztó karakter. Mivel alapértelmezés szerint egy bemeneti sor a bemeneti rekord, az alapértelmezett rekord elválasztó karakter egy újsor.
OFS: OFS parancs tárolja a kimeneti mező elválasztót, amely elválasztja a mezőket, amikor az Awk kinyomtatja őket. Az alapértelmezett egy üres hely., Ha a nyomtatásnak több paramétere van vesszővel elválasztva, akkor az OFS értékét kinyomtatja az egyes paraméterek között.
ORS: ORS parancs tárolja a kimeneti rekord elválasztót, amely elválasztja a kimeneti sorokat, amikor az Awk kinyomtatja őket. Az alapértelmezett egy newline karakter. a nyomtatás automatikusan kiadja az ORS tartalmát annak végén, amit a nyomtatáshoz adnak.,
példák:
nr beépített változók (megjelenítési sorszám) használata
$ awk '{print NR,$0}' employee.txt
kimenet:
1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000
a fenti példában az awk parancs NR-vel kiírja az összes sort a sorszámmal együtt.
NF beépített változók használata (az utolsó mező megjelenítése)
$ awk '{print $1,$NF}' employee.txt
kimenet:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
a fenti példában $1 a nevet, $NF pedig a fizetést jelenti. A fizetést $NF segítségével kaphatjuk meg, ahol a $NF az utolsó mezőt képviseli.,
az nr beépített változóinak másik használata (megjelenítési sor 3-tól 6 – ig)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
kimenet:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
további példák
az adott szöveges fájlhoz:
1) az első elem nyomtatásához a ” – ” – Vel elválasztott sorszámmal(nr) együtt a geeksforgeeks minden sorából.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2), hogy visszatérjen a második sor/tétel geeksforgeeks.,est vonal jelen van a fájlt:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) gróf, a sorokat egy fájlt:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) Nyomtatási sorok több mint 10 karakter:
$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3
7) találni/e bármilyen karakterlánc minden adott oszlop:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) – nyomtassa ki a négyzetek a számok 1-től n-6:
$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36
Ez a cikk által biztosított Anshika Goyal, valamint Praveen Negi., Ha tetszik GeeksforGeeks szeretne hozzájárulni, akkor is írni egy cikket segítségével contribute.geeksforgeeks.org vagy küldje el a cikket [email protected]. lásd a cikket megjelenő GeeksforGeeks főoldalon, és segítsen más Geeks.