awk, un exemple pour bien débuter et comprendre...
2012-10-15
$ cat file.txt
Firstname;Lastname
John;Doe
Jane;Doe
Paul;Smith
#end of file with a ; character
$ for b in b b1 b2;
do
awk -F ';' -v base=$b -v fmt='use %s; insert into Users values ("%s", "%s");\n' 'NR>=2 && /;/ && !/^#/ {printf fmt, base, $1, $2}' file.txt
done
use b; insert into Users values ("John", "Doe");
use b; insert into Users values ("Jane", "Doe");
use b; insert into Users values ("Paul", "Smith");
use b1; insert into Users values ("John", "Doe");
use b1; insert into Users values ("Jane", "Doe");
use b1; insert into Users values ("Paul", "Smith");
use b2; insert into Users values ("John", "Doe");
use b2; insert into Users values ("Jane", "Doe");
use b2; insert into Users values ("Paul", "Smith");
awk
n’est pas si compliqué que ça lorsque l’on comprend la philosophie…
La commande se décompose de la manière suivante :
BEGIN { CODE_DEBUT } MATCHAGE { CODE } END { CODE_FIN }
CODE_DEBUT
est exécuté au début du traitement du fichier ou fluxCODE_FIN
est exécuté à la fin du traitement du fichier ou fluxCODE
est exécuté sur les lignes du fichier ou flux matchées par les règles deMATCHAGE
Dans l’exemple ci-dessus,
-F ';'
indique que le séparateur de champs est le;
- les
-v
permettent de déclarer une variable awk à partir d’une variable bash (pour transmettre les informations) NR
correspond au numéro de la ligne traitée (on ignore l’entête du fichier avec le test supérieur ou égal à 2)/;/
correspond aux lignes qui contiennent un;
!/^#/
correspond aux lignes qui ne débutent pas par un dièse
Le programme ci-dessus crée les requêtes à exécuter sur chacune des bases de données pour chacun des enregistrements du fichier file.txt
Comme quoi, on peut démystifier awk
;)