Come usare Awk per stampare campi e colonne in un file

In questa parte della nostra Serie di comandi Linux Awk, daremo un'occhiata a una delle caratteristiche più importanti di Awk, che è la modifica del campo.

È bello 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.

Campi e colonne di stampa awk
Campi e colonne di stampa awk

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

Ecco come funziona l'idea della separazione di campo 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'ultima serie 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. 
Crea file in Linux
Crea file in Linux

Quindi dalla riga di comando, provo a stampare il primo, secondo e Terzo campi dal file tecmintinfo.txt usando il comando qui sotto:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt TecMint.com è il. 

Dall'output sopra, puoi vedere che i caratteri dei primi tre campi sono stampati in base a IFS definito che è lo spazio:

  1. Campo uno che è “TecMint.com” si accede utilizzando $1.
  2. Campo due che è "è" si accede utilizzando $2.
  3. Campo tre che è "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 chiaramente l'output con uno spazio tra i valori del campo, è necessario aggiungere (,) operatore come segue:

$ awk '//{stampa $1, $2, $3; }' tecmintinfo.txt TecMint.com è il. 

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

Sotto script di shell ($) è usato 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 usando un file che contiene più righe chiamato my_shoping.list.

No Item_Name Unit_Price Quantità Prezzo. 1 Topo #20,000 1 #20,000. 2 Monitor #500.000 1 #500.000. 3 RAM_Chip #150.000 2 #300.000. 4 Cavi_Ethernet #30.000 4 #120.000 

Diciamo che volevi solo stampare Prezzo unitario di ogni articolo della lista della spesa, sarà necessario eseguire il comando seguente:

$ awk '//{print $2, $3 }' my_shopping.txt  Item_Name Unit_Price. Topo # 20.000. Monitorare #500.000. RAM_Chip #150.000. Cavi_Ethernet #30.000. 

Awk ha anche un printf Il comando che ti aiuta a formattare il tuo output è un bel modo in quanto puoi vedere che l'output sopra non è abbastanza chiaro.

Usando printf per formattare l'output del Nome dell'oggetto e Prezzo unitario:

$ awk '//{printf "%-10s %s\n",$2, $3 }' mio_acquisti.txt Item_Name Unit_Price. Topo # 20.000. Monitorare #500.000. RAM_Chip #150.000. Cavi_Ethernet #30.000. 

Riepilogo

La modifica del campo è molto importante quando si utilizza Awk per filtrare testo o stringhe, ti aiuta a ottenere dati particolari in colonne in un elenco. E ricorda sempre che l'uso di ($) operatore in Awk è diverso da quello degli script 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.

Teachs.ru