- Vizsgálja meg a fájlokat soronként.
- Oszd meg az egyes sorokat mezőkre / oszlopokra.
- Adja meg a mintákat, és hasonlítsa össze a fájl sorait azokkal a mintákkal
- Végezzen különféle műveleteket az adott mintának megfelelő vonalakon
Ebben a cikkben elmagyarázzuk az awk parancs alapvető használatát és azt, hogy miként lehet felvenni egy karakterláncfájlt. A cikk példáit egy Debian 10 Buster rendszeren hajtottuk végre, de a legtöbb Linux disztribúción könnyen megismételhetők.
A használni kívánt mintafájl
A string fájlok mintafájlja, amelyet az awk parancs használatának bemutatásához fogunk használni, a következő:
Ezt jelzi a mintafájl minden oszlopa:
- Az első oszlop tartalmazza az iskolában dolgozó alkalmazottak / tanárok nevét
- A második oszlop azt a tárgyat tartalmazza, amelyet az alkalmazott tanít
- A harmadik oszlop jelzi, hogy az alkalmazott professzor vagy adjunktus-e
- A negyedik oszlop a munkavállaló fizetését tartalmazza
1. példa: Az Awk segítségével nyomtathatja ki a fájl összes sorát
A megadott fájl minden egyes sorának kinyomtatása az awk parancs alapértelmezett viselkedése. Az awk parancs következő szintaxisában nem adunk meg semmilyen mintát, amelyet az awk kinyomtatna, ezért a parancsnak a „print” műveletet kell alkalmaznia a fájl minden sorára.
Szintaxis:
$ awk 'print' fájlnév.txtPélda:
Ebben a példában azt mondom az awk parancsnak, hogy soronként nyomtassa ki a mintafájlom tartalmát.
$ awk 'print' minta_fájl.txt
2. példa: Az awk használatával csak az adott mintának megfelelő sorokat nyomtathatja ki
Az awk segítségével megadhat egy mintát, és a parancs csak az adott mintának megfelelő vonalakat nyomtatja ki.
Szintaxis:
$ awk '/ pattern_to_be_matched / print' fájlnév.txtPélda:
Ha a minta fájlból csak azokat a sorokat akarom kinyomtatni, amelyek tartalmazzák a 'B' változót, akkor a következő parancsot használhatom:
$ awk '/ B / print' minta_fájl.txt
A példa értelmesebbé tétele érdekében hadd nyomtassam ki csak azokat az adatokat, akik professzorok.
$ awk '/ professzor / print' minta_fájl.txt
A parancs csak azokat a sorokat / bejegyzéseket nyomtatja ki, amelyek tartalmazzák a „professzor” karakterláncot, így értékesebb információkkal rendelkezünk az adatokból.
3. példa. Az awk segítségével ossza fel a fájlt úgy, hogy csak meghatározott mezőket / oszlopokat nyomtasson
A teljes fájl kinyomtatása helyett az awk beállításával csak a fájl egyes oszlopait nyomtathatja ki. Az Awk alapértelmezés szerint oszloprekordként kezeli az összes, szóközzel elválasztott szót. A rekordot egy $ N változóban tárolja. Ahol $ 1 az első szót jelenti, $ 2 tárolja a második szót, $ 3 a negyediket stb. A $ 0 az egész sort eltárolja, így a ki sor kerül kinyomtatásra, az 1. példában leírtak szerint.
Szintaxis:
$ awk 'print $ N,… .' fájl név.txtPélda:
A következő parancs csak a mintafájlom első oszlopát (nevét) és a második oszlopát (tárgyát) nyomtatja ki:
$ awk 'print $ 1, $ 2' minta_fájl.txt
4. példa: Az Awk segítségével számolja ki és nyomtassa ki azoknak a soroknak a számát, amelyekben a minta illeszkedik
Mondhatod az awk-nak, hogy számolja meg a megadott mintának megfelelő vonalak számát, majd adja ki azt a 'számot'.
Szintaxis:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt' nyomtatásfájl név.txt
Példa:
Ebben a példában meg akarom számolni az „angol” tantárgyat oktatók számát. Ezért elmondom az awk parancsnak, hogy illeszkedjen az „angol” mintához, és kinyomtatom a sorok számát, amelyekben ez a minta illeszkedik.
$ awk '/ english / ++ cnt END print "Count =", cnt' minta_fájl.txt
Az itteni számlálás azt sugallja, hogy 2 ember tanít angolul a minta irat-nyilvántartásokból.
5. példa: Az awk használatával csak olyan sorokat nyomtathat, amelyeknél megadottnál több karakter van
Ehhez a feladathoz a beépített awk függvényt fogjuk használni. Ez a függvény adja vissza a bemeneti karakterlánc hosszát. Így, ha azt akarjuk, hogy az awk csak a karakterszámnál nagyobb vagy annál kevesebb sorokat nyomtasson, akkor a hosszúságfüggvényt a következő módon használhatjuk:
Számnál nagyobb karakterű sorok nyomtatásához:
$ awk 'length ($ 0)> n' fájlnév.txtSzámoknál kevesebb karakterű sorok nyomtatásához:
$ awk 'hossz ($ 0) < n' filename.txtAhol n a sorokhoz megadandó karakterek száma.
Példa:
A következő parancs csak azokat a sorokat nyomtatja ki a mintafájlomból, amelyek karaktere meghaladja a 30-at:
$ awk 'hossz ($ 0)> 30' minta_fájl.txt
6. példa: Az awk segítségével mentse a parancs kimenetét egy másik fájlba
A '>' átirányítási operátor használatával az awk paranccsal nyomtathatja ki a kimenetét egy másik fájlba. Így tudja használni:
$ awk 'criteria_to_print "fájlnév.txt> outputfile.txtPélda:
Ebben a példában az átirányítási operátort fogom használni az awk paranccsal, hogy csak az alkalmazottak nevét (1. oszlop) nyomtassam új fájlba:
$ awk 'print $ 1' minta_fájl.txt> alkalmazott_nevek.txt
A cat parancsokkal igazoltam, hogy az új fájl csak az alkalmazottak nevét tartalmazza.
7. példa: Az awk segítségével csak nem üres sorokat nyomtathat ki egy fájlból
Az Awk tartalmaz néhány beépített parancsot, amelyekkel kiszűrheti a kimenetet. Például az NF paranccsal meg lehet tartani az aktuális bemeneti rekord mezőinek számát. Itt az NF paranccsal csak a fájl nem üres sorait nyomtatjuk ki:
$ awk 'NF> 0' minta_fájl.txtNyilvánvalóan a következő paranccsal nyomtathatja ki az üres sorokat:
$ awk 'NF < 0' sample_file.txt8. példa: Az awk segítségével számolja meg a fájl összes sorát
Egy másik beépített függvény, az úgynevezett NR, megszámolja az adott fájl bemeneti rekordjainak (általában sorainak) számát. Ezt a függvényt az awk fájlban a következőképpen használhatja a fájl sorainak számításához:
$ awk 'END print NR' minta_fájl.txt
Ez volt az alapvető információ, amelyet el kell kezdeni a fájlok felosztásával az awk paranccsal. Ezen példák kombinációjával értelmesebb információkat nyerhet ki a karakterláncok fájljából az awk-n keresztül.