Az Awk használata mezők és oszlopok nyomtatására a fájlban
Linux Awk parancssorozatunknak ebben a részében az Awk egyik legfontosabb funkcióját tekintjük át, amely a helyszíni szerkesztés.
Jó tudni, hogy az Awk automatikusan mezőkre osztja a számára biztosított beviteli sorokat, és egy mezőt karakterkészletként lehet meghatározni, amelyet belső mezőelválasztó választ el a többi mezőtől.
Ha ismeri a Unix/Linux rendszert, vagy bash shell-programozást végez, akkor tudnia kell, mi az a belső mezőelválasztó (IFS) változó. Az Awk alapértelmezett IFS-je a tabulátor és a szóköz.
Így működik a mezőelválasztás ötlete az Awk-ban: amikor találkozik egy bemeneti sorral, az IFS-nek megfelelően az első karakterkészlet az első mező, amely a $1< használatával érhető el., a második karakterkészlet a kettes mező, amely a $2 használatával érhető el, a harmadik karakterkészlet a harmadik mező, amely a $3 használatával érhető el, és így tovább az utolsó karakterkészletig.
Az Awk mezőszerkesztés jobb megértéséhez vessünk egy pillantást az alábbi példákra:
1. példa: Létrehoztam egy tecmintinfo.txt nevű szövegfájlt.
vi tecmintinfo.txt
cat tecmintinfo.txt
Ezután a parancssorból megpróbálom kinyomtatni az első, második és harmadik mezőt a tecmintinfo.txt fájlból. > az alábbi paranccsal:
$ awk '//{print $1 $2 $3 }' tecmintinfo.txt
TecMint.comisthe
A fenti kimenetből láthatja, hogy az első három mező karakterei az IFS alapján vannak kinyomtatva, amely szóköz:
- Az első mező, amely a „TecMint.com ”, a
$1
használatával érhető el. - A második mező, amely „is ”, a
$2
használatával érhető el. - A harmadik mező, amely a „a ”, a
$3
használatával érhető el.
Ha a nyomtatott kimeneten észrevette, a mezők értékei nincsenek elválasztva, és a nyomtatás alapértelmezés szerint így működik.
Ahhoz, hogy a kimenet tisztán látható legyen, a mezőértékek között szóköz legyen, a következőképpen kell hozzáadnia a (,)
operátort:
$ awk '//{print $1, $2, $3; }' tecmintinfo.txt
TecMint.com is the
Egy fontos dolog, amit meg kell jegyeznünk, és mindig ne feledjük, hogy a ($)
használata az Awk-ban eltér a shell szkriptekben való használatától.
A shell szkriptek alatt a ($)
a változók értékéhez való hozzáféréshez használható, míg az Awk ($)
esetén csak a változók tartalmának eléréséhez. mező, de nem a változók értékének eléréséhez.
2. példa: Vessünk egy pillantást egy másik példára egy több sort tartalmazó, my_shoping.list nevű fájl használatával.
No Item_Name Unit_Price Quantity Price
1 Mouse #20,000 1 #20,000
2 Monitor #500,000 1 #500,000
3 RAM_Chips #150,000 2 #300,000
4 Ethernet_Cables #30,000 4 #120,000
Tegyük fel, hogy csak az Unit_Price
-ot szeretné kinyomtatni a bevásárlólistán szereplő minden egyes tételből, akkor az alábbi parancsot kell futtatnia:
$ awk '//{print $2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Az Awk rendelkezik egy printf
paranccsal is, amely segít a kimenet formázásában, ez egy jó módszer, mivel láthatja, hogy a fenti kimenet nem elég egyértelmű.
A printf
használata az Item_Name és Unit_Price kimenetének formázásához:
$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Összegzés
A mezőszerkesztés nagyon fontos az Awk használatakor a szövegek vagy karakterláncok szűrésére, mivel ez segít bizonyos adatok megjelenítésében a lista oszlopaiban. És mindig ne feledje, hogy a ($)
operátor használata az Awkban eltér a shell szkriptekben használttól.
Remélem, hogy a cikk hasznos volt az Ön számára, és ha további információra van szüksége vagy kérdése van, megjegyzést tehet a megjegyzés rovatba.