AWK - Variables intégrées

AWK fournit plusieurs variables intégrées. Ils jouent un rôle important lors de l'écriture de scripts AWK. Ce chapitre montre l'utilisation des variables intégrées.

Variables AWK standard

Les variables AWK standard sont décrites ci-dessous.

ARGC

Cela implique le nombre d'arguments fournis sur la ligne de commande.

Example

[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four

En exécutant ce code, vous obtenez le résultat suivant -

Output

Arguments = 5

Mais pourquoi AWK affiche 5 alors que vous n'avez passé que 4 arguments? Vérifiez simplement l'exemple suivant pour dissiper votre doute.

ARGV

C'est un tableau qui stocke les arguments de ligne de commande. L'index valide du tableau va de 0 à 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

En exécutant ce code, vous obtenez le résultat suivant -

Output

ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three

CONVFMT

Il représente le format de conversion des nombres. Sa valeur par défaut est%.6g.

Example

[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

Conversion Format = %.6g

ENVIRON

C'est un tableau associatif de variables d'environnement.

Example

[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

jerry

Pour rechercher les noms d'autres variables d'environnement, utilisez env commander.

NOM DE FICHIER

Il représente le nom du fichier actuel.

Example

[jerry]$ awk 'END {print FILENAME}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Output

marks.txt

Veuillez noter que FILENAME n'est pas défini dans le bloc BEGIN.

FS

Il représente le séparateur de champ (d'entrée) et sa valeur par défaut est l'espace. Vous pouvez également modifier cela en utilisant-F option de ligne de commande.

Example

[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte

En exécutant ce code, vous obtenez le résultat suivant -

Output

FS =  $

NF

Il représente le nombre de champs de l'enregistrement actuel. Par exemple, l'exemple suivant imprime uniquement les lignes contenant plus de deux champs.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'

En exécutant ce code, vous obtenez le résultat suivant -

Output

One Two Three
One Two Three Four

NR

Il représente le numéro de l'enregistrement actuel. Par exemple, l'exemple suivant imprime l'enregistrement si le numéro d'enregistrement actuel est inférieur à trois.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'

En exécutant ce code, vous obtenez le résultat suivant -

Output

One Two
One Two Three

FNR

Il est similaire à NR, mais relatif au fichier actuel. C'est utile lorsque AWK fonctionne sur plusieurs fichiers. La valeur de FNR est réinitialisée avec un nouveau fichier.

OFMT

Il représente le numéro du format de sortie et sa valeur par défaut est %.6g.

Example

[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'

En exécutant ce code, vous obtenez le résultat suivant -

Output

OFMT = %.6g

OFS

Il représente le séparateur de champ de sortie et sa valeur par défaut est l'espace.

Example

[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte

En exécutant ce code, vous obtenez le résultat suivant -

Output

OFS =  $

ORS

Il représente le séparateur d'enregistrement de sortie et sa valeur par défaut est newline.

Example

[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte

En exécutant le code ci-dessus, vous obtenez le résultat suivant -

Output

ORS = $
$

RLENGTH

Il représente la longueur de la chaîne correspondant à matchfonction. La fonction de correspondance d'AWK recherche une chaîne donnée dans la chaîne d'entrée.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

2

RS

Il représente le séparateur d'enregistrement (d'entrée) et sa valeur par défaut est newline.

Example

[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte

En exécutant ce code, vous obtenez le résultat suivant -

Output

RS = $
$

RSTART

Il représente la première position de la chaîne correspondant à match fonction.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

9

SUBSEP

Il représente le caractère de séparation des indices de tableau et sa valeur par défaut est \034.

Example

[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte

En exécutant ce code, vous obtenez le résultat suivant -

Output

SUBSEP = ^\$

0 $

Il représente l'intégralité de l'enregistrement d'entrée.

Example

[jerry]$ awk '{print $0}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Output

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

$ n

Il représente le n ième champ de l'enregistrement actuel où les champs sont séparés par FS.

Example

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Output

Physics   80
Maths     90
Biology   87
English   85
History   89

Variables spécifiques à GNU AWK

Les variables spécifiques à GNU AWK sont les suivantes -

ARGIND

Il représente l'index en ARGV du fichier en cours de traitement.

Example

[jerry]$ awk '{ 
   print "ARGIND   = ", ARGIND; print "Filename = ", ARGV[ARGIND] 
}' junk1 junk2 junk3

En exécutant ce code, vous obtenez le résultat suivant -

Output

ARGIND   =  1
Filename =  junk1
ARGIND   =  2
Filename =  junk2
ARGIND   =  3
Filename =  junk3

BINMODE

Il est utilisé pour spécifier le mode binaire pour toutes les E / S de fichiers sur les systèmes non POSIX. Les valeurs numériques de 1, 2 ou 3 spécifient que les fichiers d'entrée, les fichiers de sortie ou tous les fichiers, respectivement, doivent utiliser les E / S binaires. Valeurs de chaîne der ou wspécifiez que les fichiers d'entrée ou les fichiers de sortie, respectivement, doivent utiliser les E / S binaires. Valeurs de chaîne derw ou wr spécifiez que tous les fichiers doivent utiliser des E / S binaires.

ERRNO

Une chaîne indique une erreur lorsqu'une redirection échoue pour getline ou si close l'appel échoue.

Example

[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

Error: No such file or directory

LARGEURS DE CHAMP

Une liste de variables de largeurs de champs séparées par des espaces est définie, GAWK analyse l'entrée en champs de largeur fixe, au lieu d'utiliser la valeur de la variable FS comme séparateur de champ.

IGNORECASE

Lorsque cette variable est définie, GAWK devient insensible à la casse. L'exemple suivant illustre ceci -

Example

[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Output

1) Amit  Physics   80

PELUCHE

Il fournit un contrôle dynamique du --lintoption du programme GAWK. Lorsque cette variable est définie, GAWK imprime les avertissements de peluche. Lorsque la valeur de chaîne est fatale, les avertissements de peluche deviennent des erreurs fatales, exactement comme--lint=fatal.

Example

[jerry]$ awk 'BEGIN {LINT = 1; a}'

En exécutant ce code, vous obtenez le résultat suivant -

Output

awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect

PROCINFO

Il s'agit d'un tableau associatif contenant des informations sur le processus, telles que les numéros UID réels et effectifs, le numéro d'identification du processus, etc.

Example

[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

4316

TEXTDOMAIN

Il représente le domaine de texte du programme AWK. Il est utilisé pour trouver les traductions localisées des chaînes du programme.

Example

[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'

En exécutant ce code, vous obtenez le résultat suivant -

Output

messages

La sortie ci-dessus montre le texte anglais en raison de en_IN lieu