Bonjour à tous.
Ma problématique, c'est modifier un fichier sql via awk :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
SET FOREIGN_KEY_CHECKS=0;
 
CREATE TABLE `AUTOTASK` (
  `ID_AUTOTASK` varchar(30) NOT NULL,
  `var_name` varchar(30) NOT NULL,
  PRIMARY KEY  (`id_autotask`,`var_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
INSERT INTO `autotask` VALUES ('1HOUR_AUTOTASK.PHP', 'BASETIME');
Je souhaite harmoniser tous les champs et les noms de table en minuscule. Concrêtement mettre en minuscule toutes les chaines avec la syntaxe `ABC` ou `_ABC` ou `A_BC` ou `ABC_`, etc

Il parait que c'est simple avec l'outils awk (j'utilise une version java jawk qui répond exactement à la même syntaxe).

Mon expression rationnelle fonctionne, j'y suis presque avec le script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
{ 
if (gsub(/\`[A-Z,_]*\`/,tolower($0), $0)==1) {print $0;}
else {print;}
}
Voici le résultat:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SET FOREIGN_KEY_CHECKS=0;

CREATE TABLE create table `autotask` ( (
    `id_autotask` varchar(30) not null, varchar(30) NOT NULL,
  `var_name` varchar(30) NOT NULL,
  PRIMARY KEY  (`id_autotask  primary key  (`id_autotask`,`var_name`)var_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `autotask` VALUES ('1HOUR_AUTOTASK.PHP', 'BASETIME');
Je constate que gsub m'insère la ligne entière (en rouge) au lieu de lu mot détecté. Je pense que mon print $0 ne doit pas être bon.

Y a des connaisseurs qui peuvent m'aider ?

Merci.