Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expression régulière - transformation output

Sujet résolu
    25 avril 2017 à 13:45:42

    Bonjour tout le monde,

    Aujourd'hui j’extrais d'un fichier de logs, une suite de nombres de taille 10 ou 15 avec la commande :

    grep -E "pattern1|pattern2" fichier_de_logs.log | cut -d'"' -f8

    le résultat est le suivant, ligne par ligne :

    5460622751
    208013501966006
    5460614521
    208013203379574
    208014904077246
    5460601676
    208015003714522
    208015504127052
    208019103457519

    J'aimerai qu'il soit comme ceci à la place :

    5460622751,208013501966006
    5460614521,208013203379574,208014904077246
    5460601676,208015003714522,208015504127052,208019103457519

    En faite, je veux que tous les numéros de taille 10 soit en début de ligne et qu'il y est ensuite la suite de numéro de taille 15 sur la même ligne ...

    Je pensais partir du côté des expressions régulière style :

    if [0-9]{10} rajoute une ',' ; supprime '\n'

    else [0-9]{15} if [0-9]{15} ensuite : rajoute une ',' ; supprimer '\n'

    mais je n'ai aucune idée ...

    Merci :D



    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2017 à 14:41:25

      salut,

      tu devrais passer à (g)awk.

      et, tu devrais nous donner un échantillon représentatif de ton log, ainsi que le résultat correspondant attendu.

      en gros, ça ferait :

      gawk -F'"' '/pattern1|pattern2/{
         if(length($8)==10)output[++n]=$8;
         else if (length($8)==15)output[n]=output[n]","$8
      }
      END{
         for(i=1;i<=n;i++)print output[i]
      }' tonFichier.log



      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        25 avril 2017 à 14:57:54

        Hello

        Merci pour ta rapide réponse

        Tu as tapé en plein dans le mille :-°

        Moi j'avais trouvé ceci :

        grep -E "pattern1|pattern2" fichier_de_logs.log \
          | cut -d'"' -f8 | tr '\n' ',' \
          | awk -F',' '{for (i = 1; i < NF; i++) if(length($(i+1)) == 10) print $i";"; else print $i}' \
          | tr '\n' ',' | tr ';' '\n'

        mais c'est clairement plus ... moche !

        c'est super bien pensé la concaténation dans ton  else if punaise !

        Merci :D



        • Partager sur Facebook
        • Partager sur Twitter

        Expression régulière - transformation output

        × 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