AWK parancsok és parancsfájlok írása

Parancsok, szintaxis és példák

Az awk parancs hatékony módszer a szövegfájlok feldolgozásához vagy elemzéséhez - különösen a sorok (sorok) és oszlopok által rendezett adatfájlokhoz.

Az egyszerű awk parancsok futtathatók a parancssorból . A bonyolultabb feladatokat awk programoknak (ún. Awk szkripteknek) kell írni egy fájlhoz.

Az awk parancs alapformátuma így néz ki:

awk 'minta {action}' input-file> kimeneti fájl

Ez azt jelenti, hogy a bemeneti fájl minden vonalát vegye be; ha a vonal a mintát tartalmazza, alkalmazza a műveletet a sorra, és írja le a kimenő sort a kimeneti fájlra. Ha a mintát elhagyja, akkor a műveletet minden sorra alkalmazni kell. Például:

awk '{print $ 5}' table1.txt> output1.txt

Ez az állítás az egyes sorok 5. oszlopának elemét veszi fel, és a kimenet "output.txt" kimeneti fájljában egy sorként írja. A "$ 4" változó a második oszlopra utal. Hasonlóképpen elérheti az első, a második és a harmadik oszlopot is: $ 1, $ 2, $ 3 stb. Alapértelmezés szerint az oszlopok szóközzel vagy lapokkal (úgynevezett fehér hely) vannak elválasztva. Tehát, ha a "table1.txt" bemeneti fájl tartalmazza ezeket a sorokat:

1, Justin Timberlake, 545 cím, ár 7,30 $ 2, Taylor Swift, 723 cím, ár 7,90 $ 3, Mick Jagger, 610 cím, ár 7,90 $ 4, Lady Gaga, 118. cím, ár 7,30 $ 5, Johnny Cash, cím 482, ár 6,50 $ 6, Elvis Presley, cím 335, ár 7,30 $ 7, John Lennon, 271 cím, ár 7,90 $ 8, Michael Jackson, 373 cím, ár 5,50 $

Ezután a parancs írja a következő sorokat a "output1.txt" kimeneti fájlhoz:

545, 723, 610, 118, 482, 335, 271, 373,

Ha az oszlop leválasztó nem más, mint szóközök vagy lapok, például vessző, megadhatja, hogy az awk utasításban az alábbiak szerint:

awk -F, '{print $ 3}' table1.txt> output1.txt

Ez kiválasztja az elemeket az egyes sorok 3. oszlopából, ha az oszlopokat vesszővel elválasztjuk. Ezért a kimenet, ebben az esetben:

Cím 545 Cím 723 Cím 610 Cím 118 Cím 482 Cím 335 Cím 271 Cím 373

A göndör zárójelben ("{", "}") szereplő mondatok listáját blokknak nevezik. Ha feltételes kifejezést helyez el egy mondat előtt, akkor a blokk belsejében lévő utasítás csak akkor lesz végrehajtva, ha a feltétel igaz.

awk '$ 7 == "\ $ 7.30" {print $ 3} "table1.txt

Ebben az esetben a feltétel $ 7 == "\ $ 7.30", ami azt jelenti, hogy a 7. oszlopban szereplő elem egyenlő 7,30 dollárral. A dollárjel előtt álló backslash arra szolgál, hogy megakadályozza, hogy a rendszer a változóként értelmezze a 7 dollárt, és szó szerint vegye a dollár jelét.

Tehát ez az awk utasítás kinyomtatja az elemet minden sor 3. oszlopában, amelynek "7.30 $" van a 7. oszlopban.

Szabályos kifejezéseket is használhat feltételként. Például:

awk '/ 30 / {print $ 3}' táblázat1.txt

A két sáv ('/') közötti string a szabályos kifejezés. Ebben az esetben csak a "30." Ez azt jelenti, hogy ha egy sor tartalmazza a "30" karakterláncot, akkor a rendszer kiírja az elemet a sor 3. oszlopában. A fenti példa kimenete:

Timberlake, Gaga, Presley,

Ha az asztalelemek az awk számok, számításokat végezhetnek rájuk, mint ez a példa:

awk '{print ($ 2 * $ 3) + $ 7}'

Az aktuális sor ($ 1, $ 2 stb.) Hozzáférési elemei mellett a $ 0 változó, amely a teljes sorra (vonalra) és az NF változóra vonatkozik, amely a mezők számához igazodik.

Új változókat is definiálhat, mint ebben a példában:

awk '{sum = 0; a (col = 1, col <= NF, col ++) összege + = $ col; nyomtatási összeg; }”

Ez kiszámolja és kinyomtatja az egyes sorok összes elemének összegét.

Az Awk utasításokat gyakran a sed parancsokkal kombinálják.