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:
- S'accedeix al camp un que és \TecMint.com mitjançant
$1
. - S'accedeix al camp dos que és \és mitjançant
$2
. - 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.