Ricerca nel sito web

Come utilizzare Awk per stampare campi e colonne nel file


In questa parte della nostra serie di comandi Linux Awk, daremo uno sguardo a una delle caratteristiche più importanti di Awk, ovvero la modifica dei campi.

È bene sapere che Awk divide automaticamente le righe di input fornitegli in campi, e un campo può essere definito come un insieme di caratteri separati dagli altri campi da un separatore di campo interno.

Se hai familiarità con Unix/Linux o programmi la shell bash, allora dovresti sapere cos'è la variabile del separatore di campo interno (IFS). Gli IFS predefiniti in Awk sono tab e spazio.

Ecco come funziona l'idea della separazione dei campi in Awk: quando incontra una riga di input, secondo l'IFS definito, il primo set di caratteri è il campo uno, a cui si accede utilizzando $1<, il secondo set di caratteri è il campo due, a cui si accede utilizzando $2, il terzo set di caratteri è il campo tre, a cui si accede utilizzando $3 e così via fino all'ultimo set di caratteri.

Per comprendere meglio questa modifica del campo Awk, diamo un'occhiata agli esempi seguenti:

Esempio 1: ho creato un file di testo chiamato tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Quindi dalla riga di comando, provo a stampare i campi primo, secondo e terzo dal file tecmintinfo.txt utilizzando il comando seguente:

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

TecMint.comisthe

Dall'output sopra, puoi vedere che i caratteri dei primi tre campi vengono stampati in base all'IFS definito, ovvero lo spazio:

  1. Al campo uno, “TecMint.com ”, si accede utilizzando $1.
  2. È possibile accedere al campo due, “is ”, utilizzando $2.
  3. Al campo tre, "il ", si accede utilizzando $3.

Se hai notato nell'output stampato, i valori dei campi non sono separati ed è così che si comporta la stampa per impostazione predefinita.

Per visualizzare l'output in modo chiaro con spazio tra i valori del campo, è necessario aggiungere l'operatore (,) come segue:

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

TecMint.com is the

Una cosa importante da notare e ricordare sempre è che l'uso di ($) in Awk è diverso dal suo uso negli script di shell.

Sotto lo scripting di shell ($) viene utilizzato per accedere al valore delle variabili mentre in Awk ($) viene utilizzato solo quando si accede al contenuto di un campo ma non per accedere al valore delle variabili.

Esempio 2: diamo un'occhiata a un altro esempio utilizzando un file che contiene più righe chiamato 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		

Supponiamo che tu voglia stampare solo Unit_Price di ciascun articolo nella lista della spesa, dovrai eseguire il comando seguente:

$ 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 ha anche un comando printf che ti aiuta a formattare il tuo output in modo carino poiché puoi vedere che l'output sopra non è abbastanza chiaro.

Utilizzando printf per formattare l'output di Item_Name e 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

Riepilogo

La modifica dei campi è molto importante quando usi Awk per filtrare testo o stringhe, ti aiuta a ottenere dati particolari nelle colonne di un elenco. E ricorda sempre che l'uso dell'operatore ($) in Awk è diverso da quello nello scripting di shell.

Spero che l'articolo ti sia stato utile e per qualsiasi ulteriore informazione richiesta o domanda, puoi pubblicare un commento nella sezione commenti.