Weboldal keresés

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:

  1. Az első mező, amely a „TecMint.com ”, a $1 használatával érhető el.
  2. A második mező, amely „is ”, a $2 használatával érhető el.
  3. 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.