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:
- Al campo uno, “TecMint.com ”, si accede utilizzando
$1
. - È possibile accedere al campo due, “is ”, utilizzando
$2
. - 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.