Partage
  • Partager sur Facebook
  • Partager sur Twitter

[bash] isoler un bloc de texte

(en fonction de sa "mise en page")

Sujet résolu
    16 mai 2018 à 10:35:17

    Tout d'abord, bonjour et merci d'avance pour votre aide.
    Voici mon problème. J'ai des résultats de simulation dans un fichier texte qui se présente sous cette forme

    1000000 128 304500
      1 0.25 0.00271111 5.26218e-05 5.29514e-06
      2 0.75 0.00318889 7.03906e-05 6.2283e-06
      3 1.25 0.00327778 6.74398e-05 6.40191e-06
      4 1.75 0.00326667 6.36219e-05 6.38021e-06
      5 2.25 0.00314444 5.782e-05 6.14149e-06
      6 2.75 0.00331111 6.70086e-05 6.46701e-06
      7 3.25 0.0023 3.99329e-05 4.49219e-06
      8 3.75 0.00218889 3.90295e-05 4.27517e-06
      9 4.25 0.00244444 5.44511e-05 4.77431e-06
      10 4.75 0.00321111 6.07391e-05 6.2717e-06

    Le fichier se présente donc sous forme de blocs de cette forme. Et je voudrais en extraire juste le dernier bloc. Le problème est que la longueur des blocs est variable et je ne peux pas donc utiliser le nombre de ligne comme critère. J'ai trouvé une solution dans le cas où mon dernier bloc est le 1 00 000ème (c'est ce que j'ai le plus souvent)

    debut=$(($(sed -n '/1000000/=' profile.density_equilibre)+1))
    fin=$(sed -n '$=' profile.density_equilibre )




    Cependant j'ai également des fichier qui contiennent moins ou plus de blocs et je voudrais utiliser le fait que chaque bloc commence par une ligne sans espace comme critère.  J'ai pensé à faire un compteur qui compterai le nombre de lignes commençant sans espace mais ensuite je ne vois pas vraiment que faire de cette information. Je vous avoue que je suis un peu perdu...
    Merci d'avoir pris le temps de me lire, j’espère avoir été compréhensible.

    Edit :

    J'ai trouvé une solution. Ce n'est sûrement pas optimal mais ça marche. Je la mets ici, on sait jamais si quelqu'un a un jour  le même soucis.

    J'extrais toutes les lignes ne commençant pas par un espace dans un fichier (lignes.txt) puis je mets dans une variable le 1er "mot" de la dernière ligne de ce fichier. C'est cette variable qui sert ensuite de repère pour trouver le début du dernier bloc.

    grep "[ ]\{0\}" profile.density_equilibre | awk '$0 !~ /^ / {print $1}' > lignes.txt
    
    delimiteur=$(awk 'END {print}' lignes.txt)
    
    debut=$(($(sed -n "/$delimiteur/=" profile.density_equilibre)+1))
    fin=$(sed -n '$=' profile.density_equilibre )
    
    rm lignes.txt



    Vraiment désolé pour la création du sujet du coup qui n'était pas forcement utile.

    -
    Edité par DaoudElKadiri 16 mai 2018 à 11:31:20

    • Partager sur Facebook
    • Partager sur Twitter

    [bash] isoler un bloc de texte

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown