[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne



Le Thursday 28 January 2010 00:35:21 Jeremie COURREGES-ANGLAS, vous avez 
écrit :
> Le jeudi 28 janvier 2010 à 12:01:53, christophe a écrit :
> > Le Wednesday 27 January 2010 21:10:00 Jeremie COURREGES-ANGLAS, vous avez
> >
> > écrit :
> > > Le mercredi 27 janvier 2010 à 07:38:09, christophe a écrit :
> > > > [...]
> Désolé donc de ne pas avoir passé plus de temps à la vérification de 10
> lignes de code... cette version devrait te donner satisfaction.
> malheureusement j'ai une mauvaise nouvelle à t'annoncer : l'exécution du
> script aura vraisemblablement recopié le contenu du premier mail à la suite
> du dernier, dans le fichier de base ; ceci à cause du « echo "$line" >>
> "$file_base$fileno" »
> alors que fileno était vide.
> Comme quoi un oubli d'initialisation de variable peut être facheux...
> Le test [ "$line" != "" ] supprimera _toutes_ les lignes vides de _tous_
> tes mails.
> Mes excuses pour le désagrément.

Merci, pour tout.
Voici ma version définitive qui m'a permis de d'obtenir autant de fichiers 
mbox qu'il y a de messages dans le fichier initial :

#!/bin/bash

[ $# -eq 0 ] && printf "Usage : $0 fichier [ autrefichier... ]\n" >&2 && exit 
1

fileno=1

for file_base in "$@"; do

    while read -r line; do

        # Peu importe le nombre exact de tirets autour de "CUT HERE"
        if [[ "$line" == *"---------- CUT HERE ----------"* ]]; then
            csplit -z "$file_base$fileno" -f "$file_base$fileno-" /From:/+0
            rm -f "$file_base$fileno" "$file_base$fileno-00"
            fileno=$((fileno + 1))
            continue
        fi

        if [ "$line" != "" ] && [ "$line" != "\n" ]; then
            echo "$line" >> "$file_base$fileno"
        fi

    done < "$file_base"
    csplit -z "$file_base$fileno" -f "$file_base$fileno-" /From:/+0
    rm -f "$file_base$fileno" "$file_base$fileno-00"
done


J'ai un peu tatonné et j'ai rajouté la suggestion de Alexandre.

Merci à tous.





-- 
christophe

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: