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 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow