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