|
|
|
|
Bonjour,
je reviens vers vous de nouveau car j'ai encore un casse tête pour moi.
Je dois traiter un fichier contenant des milliers de lignes comme ci-dessous:
33@liv.fr|-1
007@froru.fr|0
00844.nen@mail.fr|0
mh@mail.fr|0
8675@mail.fr|-1
140279@rut.fr|-1
77310@mail.fr|0
0022@mail.fr|0
toto98@mail.fr|0
02vale@mail.com|-1
ilan@mail.fr|0
de maniere a pouvoir dans un script shell avoir :
-Pour les lignes avec -1
Avec SED :
sed " s/.*/DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";/" ${OUTFIL} > ${INSERTFILE}
sed " s/.*/INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'&');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);/" ${OUTFIL} > ${INSERTFILE}
sed " s/.*/DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'&');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);/" ${OUTFIL} > ${INSERTFILE}
Configuration: Linux Mozilla 1.9.0.7
Salut, sed "
/-1$/ {
s/.*/DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id=\"\";/
}
/0$/ {
s/.*/INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'&');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);/
}
" ${OUTFIL} > ${INSERTFILE};-))
$ man woman Il n'y a pas de page de manuel pour woman. |
Hello
$ cat f1.awk
$2 == -1 {printf("DELETE FROM simple where mail=\"33@liv.fr\";DELETE FROM simple_id where id=\"\";\n")}
$2 == 0 {printf("INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,\x27%s\x27);INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);\n", $1)}
$ awk -F'|' -f f1.awk < data
DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'007@froru.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'00844.nen@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'mh@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";
DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'77310@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'0022@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'toto98@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'ilan@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
|
Oui je ne l'oublie t'inquiète, merci dubcek également.
|
sed "
/-1$/ {
s/\(.*\)|-1/DELETE FROM simple where mail=\"\1\";DELETE FROM simple_id where id=\"\";/
}
/0$/ {
s/\(.*\)|0/INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'\1');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);/
}
"
$ man woman
Il n'y a pas de page de manuel pour woman. |
Bon voila j'ai testé avec les deux façons SED et AWK .
/testzip.sh: line 26: syntax error near unexpected token `('
./testzip.sh: line 26: `$2 == -1 {printf("DELETE FROM simple where mail=\"%s\";DELETE FROM simple_id where id=\"\";\n", $1)} '
Une idée? Autre question : Ce n'est pas pour opposé SED ou AWK loin de moi c'est juste que je me demande au niveau de l'optimisation et des performances dans un script laquelle entre SED ou AWK est la moins gourmande en ressources . Merci L'accès au savoir est la première liberté que chaque homme devrait avoir. |
Je pense que sed et awk sont aussi peu gourmands et performants l'un que l'autre
$ cat x
#!/bin/bash
awk -F'|' '$2 == -1 {printf("DELETE FROM simple where mail=\"%s\";DELETE FROM simple_id where id=\"\";\n", $1)} ; $2 == 0 {printf("INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,\x27%s\x27);INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);\n", $1)}' < data
$
$ ./x
DELETE FROM simple where mail="33@liv.fr";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'007@froru.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'00844.nen@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'mh@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
DELETE FROM simple where mail="8675@mail.fr";DELETE FROM simple_id where id="";
DELETE FROM simple where mail="140279@rut.fr";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'77310@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'0022@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'toto98@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
DELETE FROM simple where mail="02vale@mail.com";DELETE FROM simple_id where id="";
INSERT IGNORE INTO simple_su (acti,mail) VALUES (1,'ilan@mail.fr');INSERT INTO simple_tid (sid,tid) VALUES(LAST_INSERT_ID(),507);
|
-jipicy y avait bien un espace :
|