Traitement d'un fichier avec SED ou AWK
Résolu/Fermé
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
-
9 juil. 2009 à 17:20
pcsystemd Messages postés 700 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 29 juillet 2024 - 10 juil. 2009 à 16:21
pcsystemd Messages postés 700 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 29 juillet 2024 - 10 juil. 2009 à 16:21
A voir également:
- Traitement d'un fichier avec SED ou AWK
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Fichier iso - Guide
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
9 juil. 2009 à 17:40
9 juil. 2009 à 17:40
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};-))
dubcek
Messages postés
18744
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
4 septembre 2024
5 617
10 juil. 2009 à 08:52
10 juil. 2009 à 08:52
hello
avec awk
avec awk
$ 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);
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
23
10 juil. 2009 à 10:19
10 juil. 2009 à 10:19
Merci beaucoup jipicy,
je test et je te dis ce qu'il en est
je test et je te dis ce qu'il en est
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
10 juil. 2009 à 10:20
10 juil. 2009 à 10:20
N'oublies pas dubcek au passage aussi ;-(
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
23
10 juil. 2009 à 10:26
10 juil. 2009 à 10:26
Oui je ne l'oublie t'inquiète, merci dubcek également.
il y a juste un truc c'est que dans les lignes DELETE le where doit etre dynamique par rapport au fichier fourni et pas toujours le meme "33@liv.fr" comme dans VALUES (1,'&') dont le & a une valeur dynamique apr rapport au fichier de données.
Merci
il y a juste un truc c'est que dans les lignes DELETE le where doit etre dynamique par rapport au fichier fourni et pas toujours le meme "33@liv.fr" comme dans VALUES (1,'&') dont le & a une valeur dynamique apr rapport au fichier de données.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18744
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
4 septembre 2024
5 617
10 juil. 2009 à 10:36
10 juil. 2009 à 10:36
il me semblait aussi
remplacer cette ligne
$2 == -1 {printf("DELETE FROM simple where mail=\"%s\";DELETE FROM simple_id where id=\"\";\n", $1)}
remplacer cette ligne
$2 == -1 {printf("DELETE FROM simple where mail=\"%s\";DELETE FROM simple_id where id=\"\";\n", $1)}
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
10 juil. 2009 à 10:40
10 juil. 2009 à 10:40
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);/ } "
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
23
10 juil. 2009 à 12:09
10 juil. 2009 à 12:09
Merci,
je test tout cela et je vous dit ce qu'il en est.
;-)
je test tout cela et je vous dit ce qu'il en est.
;-)
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
23
10 juil. 2009 à 14:54
10 juil. 2009 à 14:54
Bon voila j'ai testé avec les deux façons SED et AWK .
Avec SED : Cela fonctionne sauf qu'il ne prends pas en comptepas la dernière occurrence de mon fichier.
SED traite les lignes suivantes :
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
Mais pas la derniére de mon fichier et même si j'en rajoute il ne traite jamais la derniere?
ilan@mail.fr|0
Une idée?
Avec AWK : Depuis un script shell je 'narrive pas a le faire fonctionner a mon avis il me manque des quotes ou autres mais ou car quand je le lance mon script shell en DEBUG voici l'erreur :
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
Avec SED : Cela fonctionne sauf qu'il ne prends pas en comptepas la dernière occurrence de mon fichier.
SED traite les lignes suivantes :
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
Mais pas la derniére de mon fichier et même si j'en rajoute il ne traite jamais la derniere?
ilan@mail.fr|0
Une idée?
Avec AWK : Depuis un script shell je 'narrive pas a le faire fonctionner a mon avis il me manque des quotes ou autres mais ou car quand je le lance mon script shell en DEBUG voici l'erreur :
/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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
10 juil. 2009 à 15:33
10 juil. 2009 à 15:33
Mais pas la derniére de mon fichier et même si j'en rajoute il ne traite jamais la derniere?
ilan@mail.fr|0
Vérifie qu'il n'y ait aucun caractère vide (espace) après le "0" sur la ligne...
ilan@mail.fr|0
Vérifie qu'il n'y ait aucun caractère vide (espace) après le "0" sur la ligne...
cat -A ton_fichier ou sed -n l ton_fichier;-)
dubcek
Messages postés
18744
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
4 septembre 2024
5 617
10 juil. 2009 à 15:22
10 juil. 2009 à 15:22
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);
pcsystemd
Messages postés
700
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
29 juillet 2024
23
10 juil. 2009 à 16:21
10 juil. 2009 à 16:21
-jipicy y avait bien un espace :
cat -A fichier
ipoan@mail.fr|0 $
Maintenant cela fonctionne
-dubcek cela fonctionne également parfaitement
Mille fois merci a tous les deux.
NS : J'ai un autre post en "base de données" pour une question au cas ou vous maitrisez aussi bien le SQL que SED et AWK ;-)
cat -A fichier
ipoan@mail.fr|0 $
Maintenant cela fonctionne
-dubcek cela fonctionne également parfaitement
Mille fois merci a tous les deux.
NS : J'ai un autre post en "base de données" pour une question au cas ou vous maitrisez aussi bien le SQL que SED et AWK ;-)