AWK - Variabili integrate
AWK fornisce diverse variabili integrate. Svolgono un ruolo importante durante la scrittura di script AWK. Questo capitolo mostra l'uso delle variabili integrate.
Variabili AWK standard
Le variabili AWK standard sono discusse di seguito.
ARGC
Implica il numero di argomenti forniti dalla riga di comando.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Eseguendo questo codice, ottieni il seguente risultato:
Output
Arguments = 5
Ma perché AWK mostra 5 quando hai passato solo 4 argomenti? Controlla il seguente esempio per cancellare il tuo dubbio.
ARGV
È un array che memorizza gli argomenti della riga di comando. L'indice valido dell'array varia da 0 a ARGC-1.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Eseguendo questo codice, ottieni il seguente risultato:
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Rappresenta il formato di conversione per i numeri. Il suo valore predefinito è%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Conversion Format = %.6g
AMBIENTE
È un array associativo di variabili d'ambiente.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
jerry
Per trovare i nomi di altre variabili di ambiente, utilizzare env comando.
NOME DEL FILE
Rappresenta il nome del file corrente.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
marks.txt
Tieni presente che FILENAME non è definito nel blocco BEGIN.
FS
Rappresenta il separatore di campo (input) e il suo valore predefinito è lo spazio. Puoi anche cambiarlo usando-F opzione della riga di comando.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
FS = $
NF
Rappresenta il numero di campi nel record corrente. Ad esempio, il seguente esempio stampa solo quelle righe che contengono più di due campi.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Eseguendo questo codice, ottieni il seguente risultato:
Output
One Two Three
One Two Three Four
NR
Rappresenta il numero del record corrente. Ad esempio, il seguente esempio stampa il record se il numero di record corrente è inferiore a tre.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Eseguendo questo codice, ottieni il seguente risultato:
Output
One Two
One Two Three
FNR
È simile a NR, ma relativo al file corrente. È utile quando AWK opera su più file. Il valore di FNR si ripristina con il nuovo file.
OFMT
Rappresenta il numero del formato di output e il suo valore predefinito è %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
OFMT = %.6g
OFS
Rappresenta il separatore del campo di output e il suo valore predefinito è lo spazio.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
OFS = $
ORS
Rappresenta il separatore del record di output e il suo valore predefinito è newline.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Eseguendo il codice sopra, ottieni il seguente risultato:
Output
ORS = $
$
LUNGHEZZA
Rappresenta la lunghezza della stringa da cui corrisponde matchfunzione. La funzione match di AWK cerca una data stringa nella stringa di input.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
2
RS
Rappresenta il separatore di record (input) e il suo valore predefinito è newline.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
RS = $
$
RSTART
Rappresenta la prima posizione nella stringa abbinata da match funzione.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
9
SUBSEP
Rappresenta il carattere separatore per gli indici dell'array e il suo valore predefinito è \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
SUBSEP = ^\$
$ 0
Rappresenta l'intero record di input.
Example
[jerry]$ awk '{print $0}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Rappresenta l' ennesimo campo nel record corrente in cui i campi sono separati da FS.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
Variabili specifiche di GNU AWK
Le variabili specifiche di GNU AWK sono le seguenti:
ARGIND
Rappresenta l'indice in ARGV del file corrente in elaborazione.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Eseguendo questo codice, ottieni il seguente risultato:
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
Viene utilizzato per specificare la modalità binaria per tutti i file I / O su sistemi non POSIX. I valori numerici 1, 2 o 3 specificano che i file di input, i file di output o tutti i file, rispettivamente, devono utilizzare I / O binario. Valori stringa dir o wspecificare che i file di input o di output, rispettivamente, devono utilizzare I / O binario. Valori stringa dirw o wr specificare che tutti i file devono utilizzare I / O binario.
ERRNO
Una stringa indica un errore quando un reindirizzamento non riesce per getline o se close la chiamata fallisce.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Error: No such file or directory
LARGHEZZA DI CAMPO
Viene impostato un elenco separato da spazi di variabili di larghezza di campo, GAWK analizza l'input in campi di larghezza fissa, invece di utilizzare il valore della variabile FS come separatore di campo.
IGNORARE
Quando questa variabile è impostata, GAWK non fa distinzione tra maiuscole e minuscole. Il seguente esempio lo dimostra:
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
LINT
Fornisce il controllo dinamico del file --lintopzione dal programma GAWK. Quando questa variabile è impostata, GAWK stampa gli avvisi di lanugine. Quando viene assegnato il valore di stringa irreversibile, gli avvisi di lanugine diventano errori irreversibili, esattamente come--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Si tratta di un array associativo contenente informazioni sul processo, come numeri UID reali ed effettivi, numero ID processo e così via.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
4316
TEXTDOMAIN
Rappresenta il dominio di testo del programma AWK. Viene utilizzato per trovare le traduzioni localizzate per le stringhe del programma.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
messages
L'output sopra mostra il testo in inglese a causa di en_IN locale