|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Bonjour à toutes et à tous,
Si je me permets de vous solliciter aujourd'hui, c'est que j'ai quasiment tout essayé mais je ne trouve pas la réponse tout seul ... Voici ma problématique : Je souhaite manipuler un fichier CSV (séparateur ";") avec awk pour réorganiser les colonnes. Ce fichier est le résultat d'une exportation depuis un logiciel de gestion commerciale. Or il présente un petit souci auquel je n'arrive pas à faire face ... Ligne 1 : champ1;champ2;champ3;champ4; Ligne 2 : champ1;champ2 sur plusieurs lignes;champ3;champ4; Ligne 3 : champ1;champ2;champ3;champ4; Ligne 4 : champ1;champ2;champ3;champ4; Ligne 5 : champ1;champ2 sur plusieurs lignes;champ3;champ4; Comment faire pour supprimer les saut de lignes des champs2 qui sont décomposés en plusieurs lignes ? Merci d'avance pour vos propositions !!! |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Avec "sed" ? Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Salut zipe31,
C'est bien le résultat que je souhaiterais ... Cependant ça ne fonctionne toujours pas ... Merci au fait !!! |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Système d'exploitation ? Shell ? Version de sed ? Fin de ligne du fichier ? Quel résultat obtiens-tu ? Des messages d'erreurs ? etc.
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Alors tout d'abord je ne suis pas vraiment un pro du shell ... C'est pour ça que je viens demander à des pros comme vous ...
Système d'exploitation ? Mac OS X 10.6 Shell ? bash Version de sed ? je ne sais pas comment je peux voir la version Fin de ligne du fichier ? lorsque j'édite le fichier dans vim, j'ai un ^M à la fin de chaque ligne. Les lignes correctes se terminent toutes par ";" ... Lorsqu'il s'agit d'un champ sur plusieurs lignes, il n'y a pas de ";" ... Quel résultat obtiens-tu ? Il n'y a aucune différence entre le fichier d'entrée et celui de sortie Des messages d'erreurs ? Aucun ... etc. Merci encore pour ton aide ! |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Essaies comme ça :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Pas mieux ... ;(
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Affiche la sortie de cat -A ton_fichier, d'une partie seulement ou du moins un exemple avec les mêmes fin de lignes que sur le fichier original.
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Est-ce que je peux t'envoyer ça en MP ?
|
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Oui bien sûr
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
Pas possible de t'envoyer un MP ;(
Ton profil n'accepte pas les MP |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Ok, la sortie ressemble à ça (sans les "$" après le ^M) :
Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Bon en investiguant en MP il s'avère que c'est sûrement la version de "sed" sur Mac OS X qui fasse des siennes
Donc pour expliquer la syntaxe employée... :z On définit une étiquette de branchement (boucle) N On ajoute la ligne suivante dans la mémoire principale $ !b z Si on n'a pas atteint la dernière ligne ($ !) on se branche à l'étiquette "z" (b z) et on boucle Une fois que la dernière ligne est atteinte la mémoire principale de sed ressemble à ça : Code :
Ligne 1 : champ1;champ2;champ3;champ4;\r\nLigne 2 : champ1;champ2\r\nsur plusieurs\r\nlignes;champ3;champ4;\r\nLigne 3 : champ1;champ2;champ3;champ4;\r\nLigne 4 : champ1;champ2;champ3;champ4;\r\nLigne 5 : champ1;champ2\r\nsur plusieurs\r\nlignes;champ3;champ4;\r$ En rouge ceux qu'il faut changer Donc la substitution avec "sed" devra ne prendre en compte que les fin de lignes qui ne seront pas précédées d'un point virgule. s/\([^;]\)\r\n/\1 /g C'est ce que fait cette commande qui matche une fin de ligne composée d'un retour chariot (\r ou \x0D) et d'une fin de ligne (\n ou \x0A) précédés de tout autre caractère qu'un point virgule ([^;]). Ce dernier étant entre parenthèse protégées "\(...\)" pour constituer une sous-expression réutilisable dans la partie droite de la substitution sous la forme "\1".
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
10
|
|
|
#15 |
|
Invité de passage
![]() Kévin Kévin BROCARDInscription : juin 2011 Messages : 9 ![]() |
merci beaucoup zipe31 pour ton aide précieuse ! J'espère que cela pourra aider d'autres utilisateurs ...
|
|
|
00
|
|
|
#16 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Il est résolu le problème ?
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
En partie... ça marche sous GNU/Linux mais pas sous Mac OS X
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
00
|
|
|
#18 |
![]() ![]() Idriss NeumannConsultant en SSII et étudiant au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 1 982 ![]() |
Bonsoir.
C'est encore probablement du au fait que le sed de mac est POSIX et non GNU. Je déplace donc dans les Unix. Cordialement, Idriss |
|
00
|
|
|
#19 |
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Code :
cat input_file.txt | awk '/^Ligne/{printf "\n" $0} !/^Ligne/{printf $0}'
Le seul inconvénient, c'est que ça t'ajoute une ligne vide en tête de fichier, mais ça se supprime aisément.
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com