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 :-/
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 nextchunk; fi;; esac printf '%sn' "$L" done
JKB :
Disons que je ne vois pas l'intérêt de perl par rapport à awk dans
le cas présent...
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 nextchunk; fi;;
esac
printf '%sn' "$L"
done
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 nextchunk; fi;; esac printf '%sn' "$L" done
geo cherchetout
Le 11/05/2011 21:14, *Luc Habert* a écrit fort à propos :
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 nextchunk; fi;; esac printf '%sn' "$L" done
Je suppose que je dois mettre ça dans un script (dekoup.sh) que je rendrai exécutable, mais quelle syntaxe pour l'employer ?
$ dekoup.sh monfichier ?
Le 11/05/2011 21:14, *Luc Habert* a écrit fort à propos :
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 nextchunk; fi;;
esac
printf '%sn' "$L"
done
Je suppose que je dois mettre ça dans un script (dekoup.sh) que je rendrai
exécutable, mais quelle syntaxe pour l'employer ?
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 nextchunk; fi;; esac printf '%sn' "$L" done
Je suppose que je dois mettre ça dans un script (dekoup.sh) que je rendrai exécutable, mais quelle syntaxe pour l'employer ?
ou encore : $ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais pas avec ton propre fichier ce sera que j'ai mal capté la description initiale ou que ton fichier contient des cas amusants (auquel cas ce serait bien que tu postes une partie de ton fichier ou ton propre jeu d'essai :-)
voilà le "gros fichier" à saucissoner : ---------- $ cat toto bla bla bla zorglub pas bien bla bla bla bla bla bla
zorglub bien 1 bla bla bla bla bla bla bla bla bla bla bla bla zorglub pas bien bla bla bla bla bla bla pas bon zorglub bulgroz zorglub pas bien bla bla bla bla bla bla bla bla bla zorglub pas bien zorglub pas bien
zorglub bien 2 zorglub pas bien bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla
zorglub bien 3 zorglub pas bien bla bla bla bla bla bla
zorglub bien 4
zorglub bien 5 glop glop glop finfinfin ----------
et après exécution de : ---------- $ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto ----------
ou encore :
$ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans
message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice
d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais
pas avec ton propre fichier ce sera que j'ai mal capté la description initiale
ou que ton fichier contient des cas amusants (auquel cas ce serait bien que
tu postes une partie de ton fichier ou ton propre jeu d'essai :-)
voilà le "gros fichier" à saucissoner :
----------
$ cat toto
bla bla bla
zorglub pas bien
bla bla bla
bla bla bla
zorglub bien 1
bla bla bla
bla bla bla
bla bla bla
bla bla bla
zorglub pas bien
bla bla bla
bla bla bla
pas bon zorglub bulgroz
zorglub pas bien
bla bla bla
bla bla bla
bla bla bla
zorglub pas bien
zorglub pas bien
zorglub bien 2
zorglub pas bien
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
zorglub bien 3
zorglub pas bien
bla bla bla
bla bla bla
zorglub bien 4
zorglub bien 5
glop glop glop
finfinfin
----------
et après exécution de :
----------
$ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto
----------
ou encore : $ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais pas avec ton propre fichier ce sera que j'ai mal capté la description initiale ou que ton fichier contient des cas amusants (auquel cas ce serait bien que tu postes une partie de ton fichier ou ton propre jeu d'essai :-)
voilà le "gros fichier" à saucissoner : ---------- $ cat toto bla bla bla zorglub pas bien bla bla bla bla bla bla
zorglub bien 1 bla bla bla bla bla bla bla bla bla bla bla bla zorglub pas bien bla bla bla bla bla bla pas bon zorglub bulgroz zorglub pas bien bla bla bla bla bla bla bla bla bla zorglub pas bien zorglub pas bien
zorglub bien 2 zorglub pas bien bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla
zorglub bien 3 zorglub pas bien bla bla bla bla bla bla
zorglub bien 4
zorglub bien 5 glop glop glop finfinfin ----------
et après exécution de : ---------- $ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto ----------
ou encore : $ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais pas avec ton propre fichier ce sera que j'ai mal capté la description initiale ou que ton fichier contient des cas amusants (auquel cas ce serait bien que tu postes une partie de ton fichier ou ton propre jeu d'essai :-)
voilà le "gros fichier" à saucissoner : ---------- $ cat toto bla bla bla zorglub pas bien bla bla bla bla bla bla
zorglub bien 1 bla bla bla bla bla bla bla bla bla bla bla bla zorglub pas bien bla bla bla bla bla bla pas bon zorglub bulgroz zorglub pas bien bla bla bla bla bla bla bla bla bla zorglub pas bien zorglub pas bien
zorglub bien 2 zorglub pas bien bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla
zorglub bien 3 zorglub pas bien bla bla bla bla bla bla
zorglub bien 4
zorglub bien 5 glop glop glop finfinfin ----------
et après exécution de : ---------- $ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto ----------
Par exemple : ---------- $ cat tralala3 zorglub bien 3 ----------
Voilà, à vous, les studios ;-)
Et, à voir la version de Luc Habert (attention à mettre une bang line correcte pour ton environnement et corriger la typo nextchunk/next_chunk) en voici l'équivalent probable (en tous cas avec mon jeu d'essai ça l'est :D) : $ awk '/^$/{a=NR}/^zorglub /&&a==(NR-1){++B} { print > "trilili"B}' toto
Wed, 11 May 2011 20:45:18 +0000, Loki Harfagr did cat :
Wed, 11 May 2011 21:50:57 +0200, geo cherchetout did cat :
Le 11/05/2011 20:22, *Loki Harfagr* a écrit fort à propos :
ou encore :
$ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans
message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice
d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais pas
avec ton propre fichier ce sera que j'ai mal capté la description
initiale ou que ton fichier contient des cas amusants (auquel cas ce
serait bien que tu postes une partie de ton fichier ou ton propre jeu
d'essai :-)
voilà le "gros fichier" à saucissoner : ----------
$ cat toto
bla bla bla
zorglub pas bien
bla bla bla
bla bla bla
zorglub bien 1
bla bla bla
bla bla bla
bla bla bla
bla bla bla
zorglub pas bien
bla bla bla
bla bla bla
pas bon zorglub bulgroz
zorglub pas bien
bla bla bla
bla bla bla
bla bla bla
zorglub pas bien
zorglub pas bien
zorglub bien 2
zorglub pas bien
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
zorglub bien 3
zorglub pas bien
bla bla bla
bla bla bla
zorglub bien 4
zorglub bien 5
glop glop glop
finfinfin
----------
et après exécution de :
----------
$ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto
----------
Par exemple :
----------
$ cat tralala3
zorglub bien 3
----------
Voilà, à vous, les studios ;-)
Et, à voir la version de Luc Habert (attention à mettre une bang line
correcte pour ton environnement et corriger la typo nextchunk/next_chunk)
en voici l'équivalent probable
(en tous cas avec mon jeu d'essai ça l'est :D) :
$ awk '/^$/{a=NR}/^zorglub /&&a==(NR-1){++B} { print > "trilili"B}' toto
ou encore : $ awk '/^$/{a=1}a&&/^zorglub /{a=0;print > "tralala"++B}' grofichiet
Hélas, les deux commandes se terminent presque instantanément sans message d'erreur mais aucun fichier n'est produit.
étrange, surtout s'il n'y a pas de message d'erreur (en général indice d'un problème de quotes ou d'appariage de {( :-)
peux-tu tester avec mon jeu d'essai et si ça fonctionne avec mais pas avec ton propre fichier ce sera que j'ai mal capté la description initiale ou que ton fichier contient des cas amusants (auquel cas ce serait bien que tu postes une partie de ton fichier ou ton propre jeu d'essai :-)
voilà le "gros fichier" à saucissoner : ---------- $ cat toto bla bla bla zorglub pas bien bla bla bla bla bla bla
zorglub bien 1 bla bla bla bla bla bla bla bla bla bla bla bla zorglub pas bien bla bla bla bla bla bla pas bon zorglub bulgroz zorglub pas bien bla bla bla bla bla bla bla bla bla zorglub pas bien zorglub pas bien
zorglub bien 2 zorglub pas bien bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla
zorglub bien 3 zorglub pas bien bla bla bla bla bla bla
zorglub bien 4
zorglub bien 5 glop glop glop finfinfin ----------
et après exécution de : ---------- $ awk '/^$/{a=1}a&&$1=="zorglub"{a=0;print > "tralala"++B}' toto ----------
Par exemple : ---------- $ cat tralala3 zorglub bien 3 ----------
Voilà, à vous, les studios ;-)
Et, à voir la version de Luc Habert (attention à mettre une bang line correcte pour ton environnement et corriger la typo nextchunk/next_chunk) en voici l'équivalent probable (en tous cas avec mon jeu d'essai ça l'est :D) : $ awk '/^$/{a=NR}/^zorglub /&&a==(NR-1){++B} { print > "trilili"B}' toto
Luc.Habert.00__arjf
geo cherchetout :
bash: /home/gerard/bin/dekoup.sh : bin/bash : mauvais interpréteur: Aucun fichier ou dossier de ce type
Je pense que tu as mis
#!bin/bash
en tête du fichier... Mets plutot
#!/bin/sh
geo cherchetout :
bash: /home/gerard/bin/dekoup.sh : bin/bash : mauvais interpréteur: Aucun
fichier ou dossier de ce type
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.
geo cherchetout
Le 11/05/2011 23:37, *Luc Habert* a écrit fort à propos :
Loki Harfagr :
corriger la typo nextchunk/next_chunk)
Très juste. Ça m'apprendra à tester avant de poster.
J'aurais du voir l'erreur moi-même. Mais même après correction le message d'erreur est le même. Trop fatigué ce soir, à demain pour la suite de l'aventure.
Le 11/05/2011 23:37, *Luc Habert* a écrit fort à propos :
Loki Harfagr :
corriger la typo nextchunk/next_chunk)
Très juste. Ça m'apprendra à tester avant de poster.
J'aurais du voir l'erreur moi-même. Mais même après correction le message
d'erreur est le même.
Trop fatigué ce soir, à demain pour la suite de l'aventure.
Le 11/05/2011 23:37, *Luc Habert* a écrit fort à propos :
Loki Harfagr :
corriger la typo nextchunk/next_chunk)
Très juste. Ça m'apprendra à tester avant de poster.
J'aurais du voir l'erreur moi-même. Mais même après correction le message d'erreur est le même. Trop fatigué ce soir, à demain pour la suite de l'aventure.