OVH Cloud OVH Cloud

Saucissonner un fichier texte

39 réponses
Avatar
geo cherchetout
Bonjour,

J'ai un gros fichier texte dont certaines lignes commencent par la chaîne de
caractères zorglub. Parmi ces lignes, seules certaines sont immédiatement
précédées d'une ligne vide et je voudrais que chacune de ces lignes
particulières devienne le début d'un fichier élémentaire. Depuis hier je
fais des essais avec csplit et sed mais je ne parviens à rien de correct
parce que je ne sais pas écrire une expression rationnelle portant sur
plusieurs lignes. Exemple :

$ csplit monfichier '/^&^zorglub/' {*}
950745

L'unique fichier produit est identique à mon fichier original :-/

Quelqu'un a sûrement une solution ?

9 réponses

1 2 3 4
Avatar
Luc.Habert.00__arjf
geo cherchetout :

Cette fois, le chunk unique est une copie fidèle de mon fichier...



Reste à ajuster le zorglub. Chez moi, ça marche avec un fichier contenant
des zorglubs.
Avatar
Loki Harfagr
Thu, 12 May 2011 10:41:37 +0200, geo cherchetout did cat :

Le 12/05/2011 10:04, *Loki Harfagr* a écrit fort à propos :

Mince, ça ira sûrement mieux quand j'aurai remplacé zorglub par la
véritable chaîne. ;-)



ce qui est probablement le même problème que tu as eu avec mes versions
awk :D)



Non, quand-même pas !

Mais en fait de awk j'ai gawk, ça fait peut-être des différences ?



pas sur ce code.
as-tu essayé avec mon jeu d'essai ?
Si ça marche avec *mon* jeu d'essai et que ça ne marche pas avec *ton*
vrai fichier c'est soit que ton fichier ne ressemble pas à ta description initiale
soit que tu as introduit une erreur de copie quelque-part, soit évidemment
une autre erreur à laquelle je n'ai pas encore pensé :D)
Avatar
Sergio
Le 12/05/2011 09:49, geo cherchetout a écrit :

« Mon » script :

#!bin/bash




On t'as dit :

#!/bin/bash

(avec un slash devant le "bin/bash")
!!!!!!

--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
geo cherchetout
Le 12/05/2011 10:50, *Luc Habert* a écrit fort à propos :

Reste à ajuster le zorglub. Chez moi, ça marche avec un fichier contenant
des zorglubs.



Mais le problème était autre, ça marche aussi chez moi après avoir appliqué
la commande dos2unix à mon fichier. :-)
Merci pour ton script, il mériterait d'être encadré.

Naturellement, je vais essayer aussi la commande avec awk proposée par Loki.
Avatar
Luc.Habert.00__arjf
geo cherchetout :

Mais le problème était autre, ça marche aussi chez moi après avoir appliqué
la commande dos2unix à mon fichier. :-)



Ah oui, les lignes vides n'étaient pas vides, sh considère qu'elles
contiennent le caractère ^M.
Avatar
Luc.Habert.00__arjf
geo cherchetout :

Il m'a semblé que cette commande awk s'exécute plus vite que le script
bash de Luc



C'est sur, le shell, c'est lent. C'était à moitié une blague de ma part, ce
script.

Par ailleurs, c'est un script sh, pas un script bash. Il se peut qu'il
marche avec bash, mais ce n'est pas garantit.
Avatar
geo cherchetout
Le 12/05/2011 17:20, *Luc Habert* a écrit fort à propos :

C'est sur, le shell, c'est lent. C'était à moitié une blague de ma part, ce
script.

Par ailleurs, c'est un script sh, pas un script bash. Il se peut qu'il
marche avec bash, mais ce n'est pas garantit.



Sous ma Mandriva, sh n'est qu'un lien symbolique vers bash.
Avatar
Luc.Habert.00__arjf
geo cherchetout :

Sous ma Mandriva, sh n'est qu'un lien symbolique vers bash.



Mais il se met en mode sh quand il est appellé sous ce nom. Enfin, j'espère.
Avatar
Erwan David
geo cherchetout écrivait :

Le 12/05/2011 07:59, *Erwan David* a écrit fort à propos :

1) tu as bien mis le / avant le bin ?



J'aurais du vérifier, merci pour l'idée que j'ai d'abord ignorée tant
j'étais sûr d'avoir respecté la forme convenue. (Sha-bang emprunté à un
autre script.)



Le message d'erreur le disait, mais c'est pas évident à repérer.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
1 2 3 4