Scopri come utilizzare le variabili integrate di Awk - Parte 10
Mentre scopriamo la sezione delle funzionalità di Awk, in questa parte della serie, esamineremo il concetto di variabili integrate in Awk. Ci sono due tipi di variabili che puoi usare in Awk, questi sono; Variabili definite dall'utente, di cui abbiamo parlato nella Parte 8 e variabili incorporate.
Le variabili incorporate hanno valori già definiti in Awk, ma possiamo anche modificare attentamente tali valori, le variabili integrate includono:
FILENAME
: nome del file di input corrente (non modificare il nome della variabile)FR
: numero della riga di input corrente (ovvero la riga di input 1, 2, 3... così via, non modificare il nome della variabile)NF
: numero di campi nella riga di input corrente (non modificare il nome della variabile)OFS
: separatore del campo di outputFS
: separatore del campo di inputORS
: separatore del record di outputRS
: separatore del record di input
Procediamo ad illustrare l'uso di alcune delle variabili integrate di Awk sopra:
Per leggere il nome del file di input corrente, puoi utilizzare la variabile incorporata FILENAME
come segue:
awk ' { print FILENAME } ' ~/domains.txt
Ti renderai conto che il nome del file viene stampato per ogni riga di input, questo è il comportamento predefinito di Awk quando usi la variabile incorporata FILENAME
.
Utilizzando NR
per contare il numero di righe (record) in un file di input, ricorda che conta anche le righe vuote, come vedremo nell'esempio seguente.
Quando visualizziamo il file domains.txt utilizzando il comando cat, contiene 14 righe con testo e 2 righe vuote:
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
Per contare il numero di campi in un record o in una riga, utilizziamo la variabile incorporata NR come segue:
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Successivamente, puoi anche specificare un separatore del campo di input utilizzando la variabile incorporata FS
, che definisce come Awk divide le righe di input in campi.
Il valore predefinito per FS
è spazio e tab, ma possiamo modificare il valore di FS
con qualsiasi carattere che ordinerà ad Awk di dividere le linee di input di conseguenza.
Esistono due metodi per farlo:
- un metodo è utilizzare la variabile incorporata FS
- e il secondo è invocare l'opzione -F Awk
Considera il file /etc/passwd su un sistema Linux, i campi in questo file sono divisi utilizzando il carattere :
, quindi possiamo specificarlo come nuovo separatore del campo di input quando vogliamo filtrare alcuni campi come nei seguenti esempi:
Possiamo usare l'opzione -F
come segue:
awk -F':' '{ print $1, $4 ;}' /etc/passwd
Facoltativamente, possiamo anche sfruttare la variabile incorporata FS
come di seguito:
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Per specificare un separatore di campo di output, utilizza la variabile integrata OFS
, definisce come i campi di output verranno separati utilizzando il carattere che utilizziamo come nell'esempio seguente:
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
In questa Parte 10, abbiamo esplorato l'idea di utilizzare variabili integrate di Awk dotate di valori predefiniti. Ma possiamo anche cambiare questi valori, anche se non è consigliabile farlo a meno che tu non sappia cosa stai facendo, con un'adeguata comprensione.
Dopodiché procederemo spiegando come possiamo utilizzare le variabili di shell nelle operazioni di comando di Awk, quindi rimani connesso a Tecmint.