Com utilitzar Awk per imprimir camps i columnes al fitxer


En aquesta part de la nostra sèrie d'ordres Awk de Linux, farem una ullada a una de les característiques més importants d'Awk, que és l'edició de camp.

És bo saber que Awk divideix automàticament les línies d'entrada que se li proporcionen en camps, i un camp es pot definir com un conjunt de caràcters que estan separats d'altres camps per un separador de camps intern.

Si esteu familiaritzat amb Unix/Linux o feu programació de l'intèrpret d'ordres bash, hauríeu de saber quina és la variable del separador de camp intern (IFS). Els IFS predeterminats a Awk són tabulació i espai.

Així és com funciona la idea de la separació de camps a Awk: quan es troba amb una línia d'entrada, segons l'IFS definit, el primer conjunt de caràcters és el camp 1, al qual s'accedeix mitjançant $1, el segon conjunt de caràcters és el camp dos, que s'accedeix amb $2, el tercer conjunt de caràcters és el camp tres, al qual s'accedeix amb $3 i així successivament fins a l'últim conjunt de caràcters.

Per entendre millor aquesta edició de camps Awk, donem un cop d'ull als exemples següents:

Exemple 1: he creat un fitxer de text anomenat tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

A continuació, des de la línia d'ordres, intento imprimir el primer, segon i tercer camps del fitxer tecmintinfo.txt mitjançant l'ordre següent:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

A la sortida anterior, podeu veure que els caràcters dels tres primers camps s'imprimeixen en funció de l'IFS definit, que és l'espai:

  1. S'accedeix al camp un que és \TecMint.com mitjançant $1.
  2. S'accedeix al camp dos que és \és mitjançant $2.
  3. S'accedeix al camp tres que és \el mitjançant $3.

Si us heu adonat a la sortida impresa, els valors dels camps no estan separats i així és com es comporta la impressió per defecte.

Per veure la sortida clarament amb espai entre els valors del camp, cal afegir l'operador (,) de la manera següent:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Una cosa important a tenir en compte i recordar sempre és que l'ús de ($) a Awk és diferent del seu ús en scripts de shell.

Sota l'script d'intèrpret d'ordres ($) s'utilitza per accedir al valor de les variables, mentre que a Awk ($) només s'utilitza quan s'accedeix al contingut d'un camp però no per accedir al valor de les variables.

Exemple 2: fem una ullada a un altre exemple amb un fitxer que conté diverses línies anomenades my_shoping.list.

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		

Suposem que només voleu imprimir Unit_Price de cada article de la llista de la compra, haureu d'executar l'ordre següent:

$ 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

Awk també té una ordre printf que us ajuda a formatar la vostra sortida és una bona manera, ja que podeu veure que la sortida anterior no és prou clara.

Utilitzant printf per donar format a la sortida de Item_Name i Unit_Price:

$ 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

Resum

L'edició de camps és molt important quan utilitzeu Awk per filtrar text o cadenes, us ajuda a obtenir dades particulars en columnes d'una llista. I recordeu sempre que l'ús de l'operador ($) a Awk és diferent de l'ús de l'script d'intèrpret d'ordres.

Espero que l'article us hagi estat útil i per a qualsevol informació addicional necessària o pregunta, podeu publicar un comentari a la secció de comentaris.