awk
Variables intégrées
Recherche…
FS - Séparateur de terrain
Utilisé par awk pour diviser chaque enregistrement en plusieurs champs:
echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'
aura pour résultat:
b
e
La variable FS peut également être définie à l'aide de l'option -F :
echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'
Par défaut, les champs sont séparés par des espaces (espaces et tabulations) et plusieurs espaces et tabulations sont considérés comme un seul séparateur.
RS - Séparateur d'enregistrements
Utilisé par awk pour diviser l'entrée en plusieurs enregistrements. Par exemple:
echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'
produit:
a b c
d e f
Par défaut, le séparateur d'enregistrement est le caractère de nouvelle ligne.
De même: echo "abc | de f" | awk 'BEGIN {RS = "|"} {print $ 2}'
produit:
b
e
OFS - Séparateur de champ de sortie
Utilisé par awk pour séparer les champs générés par l'instruction print . Par exemple:
echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'
produit:
b-c
e-f
La valeur par défaut est , une chaîne composée d'un seul espace.
ORS - Séparateur d'enregistrement de sortie
Utilisé par awk pour séparer les enregistrements et est généré à la fin de chaque instruction d' print . Par exemple:
echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'
produit:
b c|e f
La valeur par défaut est \n (caractère de nouvelle ligne).
ARGV, ARGC - Tableau d'arguments en ligne de commande
Les arguments de ligne de commande transmis à awk sont stockés dans le tableau interne ARGV des éléments ARGC . Le premier élément du tableau est le nom du programme. Par exemple:
awk 'BEGIN {
for (i = 0; i < ARGC; ++i) {
printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
}
}' arg1 arg2 arg3
produit:
ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"
FS - Séparateur de terrain
La variable FS est utilisée pour définir le séparateur de champ d'entrée . Dans awk , space et tab agissent comme séparateurs de champs par défaut. La valeur du champ correspondant est accessible via $1 , $2 , $3 , etc.
awk -F'=' '{print $1}' file
-
-F- option de ligne de commande pour définir le séparateur de champ d'entrée.
awk 'BEGIN { FS="=" } { print $1 }' file
OFS - Séparateur de champ de sortie
Cette variable est utilisée pour définir le séparateur de champs de sortie, qui est un espace par défaut.
awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file
Exemple:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' 'BEGIN { OFS="|" } { $1=$1 } 1' file.csv
col1|col2|col3|col4
col1|col2|col3
col1|col2
col1
col1|col2|col3|col4|col5
L'affectation de $1 à $1 dans $1=$1 modifie un champ ( $1 dans ce cas), ce qui fait que awk reconstruit l'enregistrement $0 . La reconstruction de l'enregistrement remplace les délimiteurs FS par OFS .
RS - Séparateur d'enregistrements d'entrée
Cette variable est utilisée pour définir le séparateur d’enregistrements en entrée, par défaut une nouvelle ligne.
awk 'BEGIN{RS=","} {print $0}' file
ORS - Séparateur d'enregistrement de sortie
Cette variable est utilisée pour définir le séparateur d’enregistrements en sortie, par défaut une nouvelle ligne.
awk 'BEGIN{ORS=","} {print $0}' file
NF - Nombre de champs
Cette variable vous donnera un nombre total de champs dans l'enregistrement en cours.
awk -F',' '{print NF}' file.csv
Exemple:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' '{print NF}' file.csv
4
3
2
1
5
NR - Nombre total d'enregistrements
Fournira le nombre total d'enregistrements traités dans l'instance awk cours.
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print NR}' file1 file2
1
2
3
4
5
6
7
8
Un total de 8 enregistrements ont été traités dans l'instance.
FNR - Nombre d'enregistrements dans un fichier
Fournit le nombre total de dossiers traités par le awk par exemple par rapport aux fichiers awk est le traitement
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print FNR}' file1 file2
1
2
3
4
1
2
3
4
Chaque fichier avait 4 lignes chacun, donc chaque fois que awk rencontrait un EOF FNR était remis à 0.
NF - Nombre de champs
Fournit le nombre de colonnes ou de champs dans chaque enregistrement (l'enregistrement correspond à chaque ligne). Chaque ligne est démarquée par RS qui par défaut à newline.
cat > file1
Harley Quinn Loves Joker
Batman Loves Wonder Woman
Superman is not dead
Why is everything I type four fielded!?
awk '{print NF}' file1
4
4
4
7
FS (quelque part là-haut) utilise par défaut l'onglet ou l'espace. Donc, Harley, Quinn, Loves, Joker sont considérés comme des colonnes. Le cas est valable pour les deux lignes suivantes, mais la dernière ligne comporte 7 mots séparés par des espaces, soit 7 colonnes.
FNR - Le numéro d'enregistrement en cours de traitement
FNR contient le numéro de la ligne du fichier d'entrée en cours de traitement. Dans cet exemple, vous verrez que awk recommence à 1 lorsque vous commencez à traiter le second fichier.
Exemple avec un fichier
$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3
Exemple avec deux fichiers
$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ
Exemple étendu avec deux fichiers
FNR peut être utilisé pour détecter si awk traite le premier fichier car NR==FNR est vrai uniquement pour le premier fichier. Par exemple, si vous souhaitez joindre des enregistrements de fichiers file1 et file2 sur leur FNR :
$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY
L'enregistrement ZZZZ du file2 est manquant car le FNR a une valeur maximale différente pour file1 et file2 et il n'y a pas de jointure pour les différents FNR .