|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : janvier 2006 Messages : 79 ![]() |
Bonjour,
J'ai un très gros fichier En principe, chaque ligne devrait être construite sur le modèle Mais certaines lignes sont coupées par un saut de ligne Je cherche donc à supprimer le saut de ligne lorsqu'elle ne se termine pas par </div> et à le remplacer par un espace. Ou pour dire les choses autrement, à joindre les lignes qui commencent par un caractère alphanumérique à la ligne précédente en insérant un espace. Complication supplémentaire : la même ligne est parfois coupée plusieurs fois. Et je ne trouve pas. Bien cordialement, |
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 685 ![]() |
Bonjour,
Rapidement, sans test, voici quelque chose qui devrait s'approcher de la solution: Code :
__________________
Un problème bien posé est déjà résolu (H. Bergson). |
||
|
|
00
|
|
|
#3 | ||||
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 685 ![]() |
Bon, je me corrige, après tests. Ce code fonctionne:
Code :
Code :
__________________
Un problème bien posé est déjà résolu (H. Bergson). Dernière modification par jmelyn ; 26/02/2010 à 09h34. |
||||
|
|
00
|
|
|
#4 | ||||
|
Membre à l'essai
![]() Inscription : janvier 2006 Messages : 79 ![]() |
Merci de votre aide, mais ça ne va pas. Quand je lance la commande, ça mouline un maximum et ça ne s'arrête pas. Je ne connais pas encore awk. Ça va être l'occasion de m'y mettre pour voir ce que je peux corriger
EDIT : Pardon, je n'avais pas vu le second message. Il doit quand même y avoir une erreur dans la sortie du code parce que je me retrouve avec un fichier_nouveau qui gonfle à vue d'oeil (130Mo en quelques secondes). La variante signale une erreur Code :
Code :
De mon côté, j'ai trouvé ça avec sed Code :
sed -i -e :a -e '$!N;s/\n\([a-zA-Z0-9]\)/\1/;ta' -e 'P;D' fichier J'aurais préféré une solution qui prend en considération la fin de la ligne plutôt que le début : j'aurais été plus garanti du résultat (je ne suis pas sûr que le debut de ligne soit toujours toujours un caratère alphanumérique (c'est le cas pour les premières occurences trouvées dans le fichier, mais encore une fois, il n'est pas possible de l'examiner en entier). Dernière modification par laloupiote ; 26/02/2010 à 09h53. |
||||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 685 ![]() |
Ma première proposition est fausse, elle boucle à l'infini. Mais les deux autres (notamment la troisième) est standard et devrait fonctionner partout.
Attention avec sed: pour tester, il faut mieux éviter d'utiliser l'option -i pour toujours conserver le fichier original: Une fois que la commande fonctionne de manière sûre, il suffit d'ajouter l'option -i. Edit: Généralement, la commande sed est moins lisible que awk: elle ne fonctionne qu'avec des expressions régulières. La commande awk est souvent plus verbeuse puisqu'elle possède un vrai langage, mais c'est plus clair. Tu peux comparer ton résultat avec celui que tu obtiens en utilisant awk.
__________________
Un problème bien posé est déjà résolu (H. Bergson). |
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : janvier 2006 Messages : 79 ![]() |
Oui, mais le fichier que j'utilise est lui-même une copie
|
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 685 ![]() |
Sur quelle distribution tournes-tu? Pour plus de sureté, essaie en une seule ligne:
Code :
awk '/<\/div>$/ {print} ! /<\/div>$/ {printf "%s", $0}' fichier
__________________
Un problème bien posé est déjà résolu (H. Bergson). |
|
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Inscription : janvier 2006 Messages : 79 ![]() |
Merci beaucoup !
Là c'est parfait, ça roule Je vais étudier cela de beaucoup plus près Je suis sous Fedora 12 Encore merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com