Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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 ?

10 réponses

1 2 3 4
Avatar
Luc.Habert.00__arjf
Il y a un problème avec ton #!, ce n'est pas le contenu du script qui peut
poser ce problème. Essaye avec

sh /home/gerard/bin/dekoup.sh
Avatar
Erwan David
geo cherchetout écrivait :

Le 11/05/2011 23:36, *Luc Habert* a écrit fort à propos :

Je pense que tu as mis

#!bin/bash

en tête du fichier... Mets plutot

#!/bin/sh



J'avais essayé mais avec le même résultat.



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

2) vérifie que tu n'as pas des fins de lignes DOS, auquel cas il ne
cherche pas bash, mais bash^M qui n'existe pas.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
geo cherchetout
Le 12/05/2011 01:08, *Luc Habert* a écrit fort à propos :
Il y a un problème avec ton #!, ce n'est pas le contenu du script qui peut
poser ce problème. Essaye avec

sh /home/gerard/bin/dekoup.sh



Je me suis réveillé avec la même idée. Il y a un progrès en ce sens qu'un
unique fichier est délivré, nommé chunk.0. Ce chunk contient le même nombre
de lignes que mon fichier et il ne s'en distingue que par la suppression des
espaces au début des lignes qui en comportaient.

« Mon » script :

#!bin/bash

I=0
next_chunk () {
exec > chunk."$I"
I=`expr "$I" + 1`
}

PREV_LINE_EMPTY
next_chunk

while read -r L; do
CUT=$PREV_LINE_EMPTY
PREV_LINE_EMPTY case "$L" in
'') PREV_LINE_EMPTY=t;;
zorglub*)
if test -n "$CUT"; then next_chunk; fi;;
esac
printf '%sn' "$L"
done
Avatar
geo cherchetout
Le 12/05/2011 09:49, *geo cherchetout* a écrit fort à propos :

« Mon » script :

#!bin/bash

I=0
next_chunk () {
exec > chunk."$I"
I=`expr "$I" + 1`
}

PREV_LINE_EMPTY >
next_chunk

while read -r L; do
CUT=$PREV_LINE_EMPTY
PREV_LINE_EMPTY > case "$L" in
'') PREV_LINE_EMPTY=t;;
zorglub*)
if test -n "$CUT"; then next_chunk; fi;;
esac
printf '%sn' "$L"
done




Mince, ça ira sûrement mieux quand j'aurai remplacé zorglub par la véritable
chaîne. ;-)
Avatar
Loki Harfagr
Thu, 12 May 2011 09:53:01 +0200, geo cherchetout did cat :

Le 12/05/2011 09:49, *geo cherchetout* a écrit fort à propos :

« Mon » script :

#!bin/bash

I=0
next_chunk () {
exec > chunk."$I"
I=`expr "$I" + 1`
}

PREV_LINE_EMPTY >>
next_chunk

while read -r L; do
CUT=$PREV_LINE_EMPTY
PREV_LINE_EMPTY >> case "$L" in
'') PREV_LINE_EMPTY=t;;
zorglub*)
if test -n "$CUT"; then next_chunk; fi;;
esac
printf '%sn' "$L"
done




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)
(d'ou l'intérêt d'un jeu d'essai commun)
Avatar
Luc.Habert.00__arjf
geo cherchetout :

il ne s'en distingue que par la suppression des espaces au début des
lignes qui en comportaient.



Ah zut, il faut ajouter une ligne

IFS
au début du script.
Avatar
Nicolas George
geo cherchetout , dans le message
<4dcb911a$0$30793$, a écrit :
#!bin/bash


^^^

Youhoud !
Avatar
geo cherchetout
Le 12/05/2011 10:20, *Nicolas George* a écrit fort à propos :
geo cherchetout , dans le message
<4dcb911a$0$30793$, a écrit :
#!bin/bash


^^^

Youhoud !



Quoi ? Faudrait-il un slash avant bin ? Je l'ajoute, merci.
Avatar
geo cherchetout
Le 12/05/2011 10:16, *Luc Habert* a écrit fort à propos :

Ah zut, il faut ajouter une ligne

IFS >
au début du script.



Cette fois, le chunk unique est une copie fidèle de mon fichier...
Avatar
Luc.Habert.00__arjf
geo cherchetout :

Quoi ? Faudrait-il un slash avant bin ? Je l'ajoute, merci.



C'était pourtant ce que je t'avais dit! En plus, c'est logique.
1 2 3 4