Introduction à l’utilisation de AWK

AWK est un programme qui permet de manipuler les lignes dans un fichier texte, dès qu’on parle AWK, on est dans le monde Linux.

Quand est ce que AWK est utile?

En général, lorsque vous devez transporter des données d’une système à un autre, par exemple, vous devez extraire des références d’une base sous SQL Server en environnement Windows, que vous devez comparer avec une base de données sous Mysql dans Linux. En gros lorsque vous n’avez aucune possibilité d’avoir un outil ou un programme pour le faire, alors AWK est votre sauveur, car il est puissant et permet de traiter de très gros fichiers, de façon très libre, donc vous pouvez avoir des possibilités très grandes.

Contenu

Exemple 1 : simple réutilisation des données sans altération avec Awk

imaginons que vous ayez un  fichier texte « text.txt » avec des noms et prénoms

Dupont Jean
Guynemer Marie
Dubois Robin

Nous allons utiliser Awk pour inverser le nom et le prénom :

awk '{print $2 $1}' test.txt
Jean Dupont
Marie Guynemer
Robin Dubois

Par défaut le séparateur de mot est le caractère espace.

Exemple 2 : Ajout d’une chaine de caractères aux champs existants

awk '{print "Bonjour " $2 " " $1}' test 
Bonjour Jean Dupont
Bonjour Marie Guynemer
Bonjour Robin Dubois

 

Exemple 3 : ajouter la syntaxe de requêtes SQL à une liste de référence

soit la liste de références :

AVR-11

DFV-6

BdD7a

notre fichier est une liste de mots même pas séparés par une virgules, nous devons transformer chaque ligne en requête SQL

INSERT INTO MATABLE (reference) VALUES ('AVR-11')

Syntaxe générale de AWK

Elle est la suivante :

awk [ -F fs ] fichier

awk prend entrée un fichier, mais ne vas modifier le fichier, vous devez générer un nouveau avec les lignes modifiée en utilisant le caractère ‘>’ qui redirige la sortir vers un fichier texte.

Le paramètre F permet d’indiquer un séparateur custom.

Exemple 4 : Construction d’une requête SQL avec caractères spéciaux

Les caractères spéciaux sont les apostrophes, en effet comme d’habitude lorsqu’on met des caractères. test est le nom du fichier contenant les données en csv

Ceci ne marchera pas
awk '{print "INSERT INTO FROM SAGE (ref) VALUES ('$1')"}' test


INSERT INTO MATABLE (nom) VALUES ('Dupont')

Ceci marche:
awk '{print "INSERT INTO FROM SAGE (ref) VALUES (\x27"$1 "\x27)\x3B"}' test

on a en sortie :
INSERT INTO MATABLE (nom) VALUES ('Dupont')

Si on veut ajouter des valeurs en dur il faut mettre entre parenthèses :

awk '{print "INSERT INTO FROM SAGE (ref) VALUES (\x27"$1 "\x27,\x27"valeur en dur"\x27)\x3B"}' test

INSERT INTO MATABLE (nom) VALUES ('Dupont', 'valeur en dur')

Variante avec printf: 

awk '{printf "INSERT INTO FROM SAGE (ref) VALUES (\x27%S\x27,\x27%s\x27)\x3B",$1,"valeur en dur"}' test

Pour du multiligne

awk '{printf "INSERT INTO FROM SAGE (ref) VALUES (\x27%S\x27,\x27%s\x27)\x3B",$1,"valeur en dur";print ""}' test

\x27 est la version hexadécimale du caractère apostrophe. Voici une liste pour votre référence.

Autres exemples

Convertir en fichier CSV

"andros.kim@gmail.com"	"KISS"	"ANDROS"		"Bordeaux"
"jen202@gmail.com"	"GROS"	"JENNIFER"		"Nantes"
$ awk '{print $1 "," $2 "," $3 "," $4}' test

"andros.kim@gmail.com","KISS","ANDROS","Bordeaux"
"jen202@gmail.com","GROS","JENNIFER","Nantes"

Supplément pour enlever les guillemets :

#general pattern : sed 's/find/replace/' file
# le modificateur g (greedy) est nécessaire pour tout enlever
$ sed 's/"//g' test2
andros.kim@gmail.com,KISS,ANDROS,Bordeaux
jen202@gmail.com,GROS,JENNIFER,Nantes
Retour en haut