Show Menu
Cheatography

awk (du nom de ses créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan) est ce qu’on appelle un « éditeur de flux ». Agissant comme une sorte de filtre programmable, il prend une série de lignes en entrée sur lesquelles il effectue un traitement dont il renvoie le résultat sur la sortie standard.

Foncti­onn­ement général

awk lit sur l’entrée (fichier ou saisie clavier) ligne par ligne, puis sélect­ionne les lignes à traiter à l’aide d’expr­essions ration­nelles. Chaque ligne sélect­ionnée est découpée en champs selon le séparateur d’entrée désigné par le symbole FS (caractère espace ou tabula­tion). Puis les différents champs sont mis à dispos­ition dans des variables : $1 (1er champ), $2 (2ème champ), $3 (3ème champ), …, $NF (dernier champ).

Options et paramètres

-F fs ou --field-sepearator fs
Utilise fs comme séparateur de champs.
-v var=val ou --assign var=val
Assigne la valeur val à var.
-f program-file ou --file program-file
Charge et exécute progra­m-file.
-mf NNN ou -mr NNN
mr pour maximum number of records (nbr max d'enre­gis­tre­ments) et mf pour maximum number of fields (nbr max de champs).
-W compat ou -W traditional ou --compat--traditional
Permet une compat­ibilité entre les différ­entes variantes d'AWK (awk, nawk, gawk).
-W dump-variables[=fichier] ou --dump-variables[=fichier]
Affiche un récapi­tulatif trié des variables globales, leurs types et leurs valeurs.
-W help ou -W usage ou --help ou --usage
Affiche l'aide.
-W version ou --version
Affiche la version.
--
Marque la fin des options.

Entrée­s/s­orties

close(fichier [, méthode])
Ferme un fichier, un pipe ou un traitement déporté. Le paramètre optionnel méthode n'est à utiliser que lors de la fermeture d'un pipe bidire­cti­onnel vers un traitement déporté (valeurs possibles : "­to" ou "­fro­m").
getline
Charge la dernière saisie dans $0 ; NF, NR et FNR sont également initia­lisés. Retourne 0 une fois atteinte la fin du fichier (EOF) ou 1 en cas d'erreur. Si erreur il y a, ERRNO contient une descri­ption du problème.
getline <fichier
Renseigne $0 avec le contenu de l'enre­gis­trement (record) suivant ; initialise NF.
getline var
Renseigne var avec le contenu de la saisie (input record) suivante ; initialise NF ainsi que FNR.
getline var <fichier
Renseigne var avec le contenu de l'enre­gis­trement (record) suivant issu de fichier.
commande | getline [var]
Exécute la commande et envoie la sortie soit vers $0, soit vers var.
commande |& getline [var]
Exécute commande en qualité de traitement déporté.
next
Interrompt le traitement de l'enre­gis­trement (record) courant, puis passe au suivant.
nextfile
Interrompt le traitement du fichier en cours, puis passe au suivant. FILENAME et ARGIND sont mis à jour, FNR repasse à 1.
print
Affiche l'enre­gis­trement (record) en cours. La chaîne se termine par le contenu de la variable OFS.
print expressions
Affiche les éléments passés en paramètre, tous séparés par la valeur définie dans OFS. La chaîne de sortie se termine par la valeur contenue dans ORS.
print expressions >fichier
Insère dans fichier les éléments passés en paramètre, tous séparés par la valeur définie dans OFS. La chaîne de sortie se termine par la valeur contenue dans ORS.
printf format, expressions
Affichage formaté, à la manière du printf du C.
printf format, expressions >fichier
Même chose qu'au-­dessus, mais dans un fichier.
system(ligne de commande)
La commande est exécutée et son code de sortie récupéré.
fflush([fichier])
Purge les caches associés avec le fichier. Si ce dernier n'existe pas, c'est stdout qui se trouve purgé. Si le paramètre fichier est à null, tous les caches de fichiers et de pipes sont alors purgés.
print ... >> fichier
Ajout de données à la fin d'un fichier.
print ... | commande
Envoie la sortie d'une commande dans un pipe.
print ... |& commande
Envoie des données à un traitement déporté.

Actions pré-tr­ait­ement et post-t­rai­tement

BEGIN { Actions}
{ACTION} # Actions qui seront exécutées sur chaque ligne
END { Actions }

# les lignes de commen­taires commencent par un dièse.
Les actions suivant la balise BEGIN sont exécutées avant que le traitement des données fournies en entrée ne commence, tandis que les actions derrière END sont exécutées une fois que toutes les lignes ont été traitées.

Fonctions relatives au temps

systime()
Retourne le nombre de secondes écoulées depuis l'Epoch (1970-­01-01 00:00:00 UTC).
mktime(datespec)
Transforme datespec (de la forme YYYY MM DD HH MM SS[ DST]) en nombre de secondes écoulées depuis l'Epoch (1970-­01-01 00:00:00 UTC).
strftime([format [, timest­amp]])
Formate timestamp sur la base de ce qui est fourni dans format. timestamp est un nombre de secondes écoulées depuis l'Epoch tel que retourné par systime(). Si timestamp n'est pas renseigné, l'heure courante est utilisée.

Variables

FS
Séparateur de champs en entrée.
OFS
Séparateur de champs en sortie.
RS
Séparateur de lignes en entrée.
ORS
Séparateur de lignes en sortie.
NR
Nombre de lignes.
NF
Nombre de champs.
FILENAME
Nom du fichier passé en paramètre.
FNR
Nombre de lignes dans le fichier courant.
$0
Toute la ligne.
$1, $2...$n
Champs de 1 à n.
ARGC
Nombre de paramètres sur la ligne de commande.
ARGV
Tableau contenant les paramètres passés sur la ligne de commandes. Indexé de 0 à ARGC - 1.
ARGIND
Indique quel fichier listé dans ARGV est en cours de traite­ment.

Notion­s-clef

- awk voit le texte sous la forme de lignes et de champs,
- awk supporte l’usage de condit­ions, de boucles et de variables,
- awk peut traiter des chaînes de caractères et des chiffres,
- awk peut générer des rapports formatés.

Opérateurs

&& || !
Opérateurs logiques (ET, OU, NON).
< <= == != >= > ~ !~
Opérateurs de compar­aison.

Mathém­atiques

atan2(y, x)
Retourne l'arc tangente de y/x en radians.
cos(x)
Retourne le cosinus de x, en radians.
exp(z)
Retourne l'expo­nen­tielle de z.
int(f)
Retourne la part entière de f.
log(e)
Fonction logari­thm­ique.
rand()
Retourne un nombre réel aléatoire N compris entre 0 et 1 où 0 <= N < 1.
sin(x)
Retourne la sinuso­ïdale de x, en radians.
sqrt(x)
Retourne la racine carrée de x.
srand([expression])
Génère un nombre aléatoire sur la base d'expression. Si expression n'est pas renseigné, la date est utilisée.

Traite­ments sur les chaînes

asort(s [, d])
Retourne le nombre d'éléments présents dans le tableau s. Le contenu de s est trié, puis réindexé en partant de 1. Si le tableau destin­ation optionnel d est spécifié, alors s est dupliqué dans d, puis le traitement s'effectue sur d, laissant s inchangé.
asorti(s [, d])
Même chose que asort() à ceci près que ce sont les indices du tableau et non les valeurs qu'il contient qui sont utilisées pour le tri.
gensub(r, s, h [, t])
Cherche les occurr­ences de la regex r dans t. Si h est une chaîne commençant par g ou G, alors toutes les occurr­ences de r sont remplacées par s. Sinon, h est necess­air­ement un chiffre indiquant quelle occurrence de r remplacer. Si t n'est pas fourni, $0 est alors utilisé. Cette fonction, au contraire de sub() et gsub(), retourne la chaîne modifiée en résultat, laissant la chaîne d'origine inchangée.
gsub(r, s [, t])
Remplace toutes les occurr­ences de la regex r au sein de la chaîne t par s, puis retourne le nombre de change­ments opérés. Si t n'est pas renseigné, $0 est utilisé.
index(s, t)
Retourne la position de t dans s ou 0 si t n'est pas trouvé.
length([s])
Retourne la taille de la chaîne s.
match(s, r [, a])
Retourne la position de la regex r au sein de s. RSTART et RLENGTH sont initia­lisées.
split(s, a [, r])
Découpe la chaîne s sur la base de la regex r et stocke les sections résult­antes dans le tableau a. Le nombre de champs (fields) est retourné. Si r n'est pas fourni, FS est utilisé. Notez que a est vidé avant le début du traite­ment.
sprintf(format, expressions)
Affichage formaté, à la manière de printf en C.
strtonum(chaîne)
Transforme une chaîne en nombre. Si la chaîne commence par 0, elle est traitée comme une valeur octale. Si elle commence par 0x ou 0X, elle est traitée comme une valeur hexadé­cimale.
sub(r, s [, t])
Remplace la 1ère occurrence de la regex r au sein de la chaîne t par s, puis retourne le nombre de change­ments opérés. Si t n'est pas renseigné, $0 est utilisé.
substr(s, i [, n])
Collecte le contenu de s à partir du point i. Si n (balise de fin) n'est pas fourni, alors on récupère le reste de s.
tolower(chaîne)
Transforme les majuscules en minusc­ules.
toupper(chaîne)
Transforme les minuscules en majusc­ules.

Manipu­lation d'éléments binaires

and(v1, v2)
ET logique sur v1 et v2.
compl(vx)
Retourne le complément bit-à-bit de vx.
lshift(valeur, compteur)
Décale valeur de compteur bits vers la gauche.
or(v1, v2)
OU logique sur v1 et v2.
rshift(valeur, compteur)
Décale valeur de compteur bits vers la droite.
xor(v1, v2)
OU EXCLUSIF sur v1 et v2.
                                                   
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          Linux Command Line Cheat Sheet
          mod_rewrite Cheat Sheet
          awk (english) Cheat Sheet

          More Cheat Sheets by TME520

          Lantern Light for MSDOS keyboard mapping Cheat Sheet
          Top 30 linux shell tricks Cheat Sheet
          Anki Vector Cheat Sheet