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