Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 21h30   #1
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Par défaut sed sur un CSV

Bonsoir,

J'ai un fichier très lourd de plus de 100 mo en CSV.

En fessant un
sur mon fichier voici ce que j'ai

"0","-","-","-","-","-","-","-","-","-"

Toutes les lignes son pareil avec des donnée différent bien entendu .

Je voudrai les insérer dans une base de donnée donc voila mes commandes que j'ai faite et qui ne fonctionne pas toutes très bien.
La première fonctionnel :
Code :
1
2
 
sed 's/^"/INSERT INTO maTable VALUES ("/' monFichier.CSV > fichierVierge.SQL
Celle qui ne fonctionne pas :

Code :
1
2
 
sed 's/"$/");/' monFichier > fichierVierge
Visiblement je n'arrive pas à trouver le dernier caractère de chaque ligne qui correspond à mon fichier CSV, puisque aucun remplacement ne s'effectue.

Même si avant je fais un cat monFichier.CSV > fichier.sql cela ne change rien.


Merci de votre aide.


Edit : peut être que vous avez un moyen plus simple pour rentrer ce gros fichier dans une base de donnée.
Mais j'ai pensé à celle là qui est assez rapide si elle marche.
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 22h22   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$ cat plop
"0","-","-","-","-","-","-","-","-","-"
"0","-","-","-","-","-","-","-","-","-"
"0","-","-","-","-","-","-","-","-","-"

$ sed -i.bak 's/.*/INSERT INTO maTable VALUES (&);/' plop

$ cat plop
INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 23h10   #3
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Merci de ta réponse rapide mais je me retrouve pour les 10 premieres lignes avec :

Citation:
);SERT INTO maTable VALUES ("0","255","-","-","-","-","-","-","-","-"
);SERT INTO maTable VALUES ("256","16777215","-","-","-","-","0.000000","0.000000","-","-"
INSERT INTO maTable VALUES ("16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
);SERT INTO maTable VALUES ("16777472","16843007","-","-","-","-","0.000000","0.000000","-","-"
INSERT INTO maTable VALUES ("16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
);SERT INTO maTable VALUES ("16843264","16909055","-","-","-","-","0.000000","0.000000","-","-"
INSERT INTO maTable VALUES ("16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
);SERT INTO maTable VALUES ("16909312","17039359","-","-","-","-","0.000000","0.000000","-","-"
INSERT INTO maTable VALUES ("17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
);SERT INTO maTable VALUES ("17039616","17367039","-","-","-","-","0.000000","0.000000","-","-"
Si je te fais un sed 10q sur le fichier d'origine cela me donne :
Citation:
"0","255","-","-","-","-","-","-","-","-"
"256","16777215","-","-","-","-","0.000000","0.000000","-","-"
"16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
"16777472","16843007","-","-","-","-","0.000000","0.000000","-","-"
"16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
"16843264","16909055","-","-","-","-","0.000000","0.000000","-","-"
"16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
"16909312","17039359","-","-","-","-","0.000000","0.000000","-","-"
"17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
"17039616","17367039","-","-","-","-","0.000000","0.000000","-","-"
Merci de ton aide
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 23h22   #4
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Code awk :
1
2
3
4
> awk '{ print "INSERT INTO matable VALUES ("$0");" }' plop
INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
Ca marche aussi sur l'extrait réel de 10 lignes que tu as fourni.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 23h50   #5
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Merci FRUIT mais je ne connais vraiment rien avec la commande awk.
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 07h40   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Voila ce que j'obtiens sur ton exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
$ sed 's/.*/INSERT INTO maTable VALUES (&);/' plop
INSERT INTO maTable VALUES ("0","255","-","-","-","-","-","-","-","-");
INSERT INTO maTable VALUES ("256","16777215","-","-","-","-","0.000000","0.000000","-","-");
INSERT INTO maTable VALUES ("16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
INSERT INTO maTable VALUES ("16777472","16843007","-","-","-","-","0.000000","0.000000","-","-");
INSERT INTO maTable VALUES ("16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
INSERT INTO maTable VALUES ("16843264","16909055","-","-","-","-","0.000000","0.000000","-","-");
INSERT INTO maTable VALUES ("16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
INSERT INTO maTable VALUES ("16909312","17039359","-","-","-","-","0.000000","0.000000","-","-");
INSERT INTO maTable VALUES ("17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
INSERT INTO maTable VALUES ("17039616","17367039","-","-","-","-","0.000000","0.000000","-","-");
Peux-tu afficher le résultat de la commande "cat -A ton_fichier_exemple" s'il te plaît, merci.
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 14h33   #7
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Donc avec la commande cat -A en en arrêtant peu de temps après l’exécution car il doit y avoir plus de 1 million de ligne voici les nouvelle lignes qui apparaisse :

Code :
1
2
3
4
5
6
7
8
9
10
"0","255","-","-","-","-","-","-","-","-"^M$
"256","16777215","-","-","-","-","0.000000","0.000000","-","-"^M$
"16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"^M$
"16777472","16843007","-","-","-","-","0.000000","0.000000","-","-"^M$
"16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"^M$
"16843264","16909055","-","-","-","-","0.000000","0.000000","-","-"^M$
"16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"^M$
"16909312","17039359","-","-","-","-","0.000000","0.000000","-","-"^M$
"17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"^M$
"17039616","17367039","-","-","-","-","0.000000","0.000000","-","-"^M$
Comment je peux l'ajouter a la commande ?


Merci de ton aide
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h20   #8
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Citation:
Envoyé par xoum89 Voir le message
Merci FRUIT mais je ne connais vraiment rien avec la commande awk.
De toute façon avec les retours chariots microsoft ^M, elle ne marche pas mieux que le sed...

Il faudrait préalablement traiter ton fichier avec par exemple ceci ou cela
Oublie pas de faire des backups.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h24   #9
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
A mais je ne dis pas le contraire mais c'était juste pour te dire qu'il faudrait que tu m'explique un peu plus comment ta commande fonctionne car je ne connais rien.
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h26   #10
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par xoum89 Voir le message
Donc avec la commande cat -A en en arrêtant peu de temps après l’exécution car il doit y avoir plus de 1 million de ligne voici les nouvelle lignes qui apparaisse :

Code :
1
2
"0","255","-","-","-","-","-","-","-","-"^M$
"256","16777215","-","-","-","-","0.000000","0.000000","-","-"^M$
Comment je peux l'ajouter a la commande ?


Merci de ton aide
La commande était là juste pour afficher les fins de ligne et constater que c'est des fins de ligne à la Micro$oft ;-((

Il faut convertir ton fichier en mode Unix avant de lancer les commandes (sed ou awk).
Voir la FAQ
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/03/2011, 15h29   #11
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Pour chaque ligne du fichier plop,

Code awk :
'{ print "INSERT INTO matable VALUES ("
écrire la string "INSERT INTO mytable VALUES("

suivie de la ligne entière en question

suivie de la string ");"

Les accolades {} signifient de faire une action sur la ligne (ici ajouter du texte avant et après).

Les apostrophes simples ' ' délimitent le script awk à exécuter sur le fichier plop.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 31/03/2011, 16h52   #12
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Merci beaucoup à vous deux.

Bonne journée.
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 17h03   #13
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Question con : tu n'as pas un utilitaire avec ta bdd qui permettrait de faire ça proprement ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h56   #14
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Va faire cela sur une machine linux sans interface graphique ainsi qu'un fichier de plus de 100 MO

Au total plus de 2 million de lignes
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 13h27   #15
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Ben justement, utiliser un truc comme mysqlimport sous MySQL ou autre me paraît vachement plus sûr que de transformer 2 millions de lignes avec sed pour en faire des INSERT... pour peu que tu aies un " qui traîne, un saut de ligne au mauvais moment ou que sais-je, ça va foirer... alors qu'un outil spécifique fera des contrôles à priori...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h41.


 
 
 
 
Partenaires

Hébergement Web