Forum Programmation.shell Comment lire une ligne d'un fichier en fonction de son numéro

Posté par  .
Étiquettes : aucune
0
10
avr.
2006
Bonjour j'ai un fichier de log verticale (ex:
------------------
ligne1
ligne2
ligne3
..
------------------
ligne 1
ligne 2
ligne 3
------------------

Je souhaiterai extraire ce qui se trouve entre les séparateurs mais je vous avoue que j'ai un peu de mal à faire mon script en shell ..
notamment mon ptit awk

A vos âmes charitables !!!
Merci d'avance ...
  • # Tu peux préciser ?

    Posté par  (site web personnel) . Évalué à 1.

    J'ai aps bien compris le format et ce que tu veux extraire...

    Peut être :
    awk 'BEGIN{IN=0}/------------------/{IN=!IN}!/------------------/{if(IN) print $0}' t
    • [^] # Re: Tu peux préciser ?

      Posté par  . Évalué à 1.

      mon fichier est de ce type ( entre () c 'est le nr de la ligne)

      1 --------------------
      2 ligne
      3 ligne
      4 ligne
      .....
      23 --------------------
      24 ligne
      25 ligne
      .....



      et je veux recuperer la 1ere ligne (apres une ligne "------------------")
      qui correspond à un etat
      la 2eime ligne à la date
      la 3eime ligne à l'heure
      et de la 4eime ligne à la neime ligne (avant la prochaine ligne "-------------")
      à des noms de fichiers

      Je vais tester ta config awk
      Merci
  • # essaie ça:

    Posté par  . Évalué à -1.

    awk -F"------------------" '{printf("%s,%s,%s,%s",$1,$2,$3,$4)}' fichier
  • # Metttre en champs les lignes d'un fichier

    Posté par  . Évalué à 1.

    Merci de votre cogitation intellectuelle .....


    Pour facilitez à la rigueur il faudrait que je reussisse à mettre en ligne tout ce qui se trouve entre les lignes separatrice "--------------------"
    Du coup je peux utiliser awk avec les $1,$2 jusqu'au $Nf
    Ca semblerai plus simple !!

    Le tout est de réussir à faire ca ..
    • [^] # Re: Metttre en champs les lignes d'un fichier

      Posté par  . Évalué à 2.

      awk 'BEGIN {
      FS="\n"
      RS="------------------\n"
      }

      $0 != ""{
      #printf(" Ligne %s\n",$0)
      for (i=1;i<=NF;i++) {
      printf "l %s: %s\n",i,$i
      }
      }' fichier

      Cette fois ci je pense que c'est la bonne.

      A noter que tu as un élément vide en $1 et $NF
      • [^] # Re: Metttre en champs les lignes d'un fichier

        Posté par  . Évalué à 3.

        Ceci correspondrait mieux je pense a ta demande:
        awk 'BEGIN {
        FS="\n"
        RS="------------------"
        }

        $0 != ""{
        #printf(" Ligne %s\n",$0)
        for (i=1;i<=NF;i++) {
        printf ("%s ",$i)

        }
        printf("\n")
        }' fichier
        • [^] # Re: Metttre en champs les lignes d'un fichier

          Posté par  . Évalué à 3.

          explication quand même: RS= séparateur d'enregistrement, FS=separateur de champ.
          Tu les initialise dans la section BEGIN.
          • [^] # Re: Metttre en champs les lignes d'un fichier

            Posté par  . Évalué à 1.

            Super Totof2000
            Je te remercie , ca fait un truc pas mal !!!
            Je vais pouvoir parser à la régulière !! (Avant décryptage de ton awk !!)
            • [^] # Re: Metttre en champs les lignes d'un fichier

              Posté par  . Évalué à 1.

              tiens, je croyais que j'avais répondu sur ce forum, pis finalement non.

              Rien à rajouter sur awk, tout a déjà été dit. Par contre, si tu as la main sur le programme qui crache le log, le mieux, ça serait quand même de le faire tout logguer sur une seule ligne.
              Les logs multilignes, c'est très joli pour l'utilisateur, mais c'est inexploitable. Priez pour ne jamais avoir à parser le retour des commandes net * de windows ... (en tout cas, des nt 4)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.