Couper un fichier en plusieur (shell)

Bonjour,
Je souhaite couper un fichier en plusieurs autres.
Mon fichier principal est de le forme :
*/titre
paragraphe
*/titre
paragraphe
...

Je voudrais mettre le contenu de chaque paragraphe dans un fichier de meme nom que le titre. Les lignes contenant le titre commencent par */ et sont donc facilement récupérables.
Tout cela avec un script shell, comment faire ?
Configuration: Linux Mandriva
Firefox 1.5.0.7

3 réponses

  1. Modérateur
    Ca se fait facilement en python, en perl, ou en C++ avec la lib pcre. Je pense que c'est faisable en shell mais c'est plus chiant. L'idée c'est de lire ton fichier ligne par ligne, et dès que tu détectes avec une expression régulière un titre, tu stockes tout ce que tu lis dans un nouveau fichier jusqu'à tomber sur un nouveau titre.

    Il faudrait nous dire ce que tu fais du texte situé avant le premier titre.

    Dans ton cas l'expression régulière serait du genre :
    "^\s*(\d*)/\s*(\.*)\s*$"

    et contiendra deux éléments (le numéro du titre et le titre lui même).

    Bonne chance
    0
    1. Je n'ai pas trouve la solution en shell, d'ailleurs je n'ai pas cherche car je crois avoir trouve une solution assez simple en langage Awk.
      Il faut executer la commande:
      awk -f moulinette.awk texteaanalyser.txt

      Et voici le contenu du fichier moulinette.awk:

      #!/bin/awk
      BEGIN {titre = "";}
      $0 !~ /^*\// && "" != titre {print > titre".txt";}
      /^*\// {sub(/^*\//,""); titre = $0;}
      # fin

      Est ce que le langage shell doit obligatoire etre utilise ?
      0
      1. Modérateur
        Salut,

        c'est difficile de faire des choses de ce genre en shell pur (je n'ose même pas de penser)

        souvent se sont des utilitaires (langages) comme sed et awk qui font l'affaire - mais ça ne sera pas de shell mais de sed ou de awk

        perso je pourrai proposer une soluce en Perl, mais comme la demande c'était pour shell...

        l'extraction par paragraphe ce n'est pas difficile en Perl

        de façon générale
        print $paragraphe if /DEBUT/.../FIN/

        En sachant qu'on peut récuperer dans une variable le nom de titre et ensuite créer le fichier etc..
        0

        Discussions similaires

        question pix mot caché

        7 réponses