Extraire certaines ligne d'un txt en shell

Résolu
nbonnet Messages postés 503 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

JE voudrais pouvoir extraire d'un fichier log les log concernant le jour d'exécution de mon script. Je precise que toutes les lignes de mon fichier de log commence par la date sous la forme jjj mmm ddd.

Je n'arrive pas a trouver par quel moyen je peux attaquer ce problème. Je veux analyser les ligne jusqu'à ce que je trouve la date du jour. puis une fois cette ligne trouvée je veux extraire la fin du fichier et copier dans un autre fichier.

pouvez vous m'aider.
--
---------------------------------------------------------------------
La vie est-elle trop courte pour rester derrière son écran?
Configuration: Mac OS X
Firefox 3.5.7

12 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    DATE=$(date '+%a %b %d')
    sed -n '/^'"${DATE}"'/,$ p' radius.log>>rad.log 

    Devrait le faire ;-))
    1
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    sed -n '/^jjj mmm ddd/,$ p' fichier.log

    0
  3. nbonnet Messages postés 503 Statut Membre 48
     
    euh merci je suppose que cela me permet de lire la date de la première ligne d'après ce que je comprend?
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ça te permet (en théorie) d'extraire effectivement toutes les lignes commençant (^) par le motif (jjj mmm ddd) supposé être ta date de référence et ce jusqu'à la fin ($) du fichier...

    À adapter selon tes besoins.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nbonnet Messages postés 503 Statut Membre 48
     
    oki cela fonctionne comme je veux. mais lorsque je le fait dans mon script en voulant utiliser la date du pc via la commande date :

    sed -n '/^date \'+%a %b %d\'/,$ p' radius.log>>rad.log

    voici la réponse.

    ./bago.sh: line 1: unexpected EOF while looking for matching `''
    ./bago.sh: line 2: syntax error: unexpected end of file

    Si je comprend bien il y a un souci sur le EOF qui n'est pas marqué correctement. mais je vois pas comment.

    quand je fait cette commande

    sed -n '/^Mer jan 27/,$ p' radius.log>>rad.log

    cela fonctionne sans problème.
    0
  7. nbonnet Messages postés 503 Statut Membre 48
     
    Grand merci ca marche mais par contre quand ej le test sur mon serveur j'ai un souci sur la date. Je sais que cela n'a plus de rapport avec le debut du post mais peux tu m'aider.

    Mon fichier de log sur le serveur à les dates en anglais (Wed Jan 27) et la commande date me la donne en français (Mer Jan 27) je trouve pas comment la passer en anglais. Il existe peut être une autre commande pour travailler sur la date.

    Merci pour ton aide.
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    DATE=$(LC_TIME=en date '+%a %b %d')

    ;-))
    0
    1. nbonnet Messages postés 503 Statut Membre 48
       
      Slt je reviens sur cette partie de mon script.

      J'ai une question tjs sur la date. mon serveur me genere des log daté sous la forme :

      Tue Feb 9

      mais la focntion date me renvoi

      Tue Feb 09

      comment je peux faire pour que cela corresponde? enfin je sais si c'est possible
      0
      1. nbonnet Messages postés 503 Statut Membre 48 > nbonnet Messages postés 503 Statut Membre
         
        en cherchant de nouveau j'ai trouvé uns solution

        DATE=$(LC_TIME=en date '+%a %b %d')
        echo $DATE | sed 's/0/ /' > var.txt

        mais maintenant je n'arrive pas a récup la ligne du fichier var.txt dans une variable
        0
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > nbonnet Messages postés 503 Statut Membre
         
        DATE=$(LC_TIME=en date '+%a %b %d' | sed 's/0/ /') 
        0
  9. nbonnet Messages postés 503 Statut Membre 48
     
    dsl du retard j'étais sur autre chose je test et je fais un retour. Grand merci à toi.
    0
  10. nbonnet Messages postés 503 Statut Membre 48
     
    Ca marche nickel merci bien.

    Puis je exagérer. Je viens d'éplucher pas mal de lien sur sed mais je trouve pas la commande qu'il me faut.

    Je souhaite supprimer certaines lignes d'un des fichier temporaire que j'utilise. Je m'explique les "bonnes lignes" commencent toutes par [el.... et malheureusement je retrouve des lignes qui ne correspondent pas. Comment les supprimer du fichier pour éviter de polluer mes calculs.

    Merci d'avance.
    -
    ---------------------------------------------------------------------
    La vie est-elle trop courte pour rester derrière son écran?
    0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    sed -i.bak '/^\[el/!d' fichier.log


    Voir dans la FAQ : sed
    0
  12. nbonnet Messages postés 503 Statut Membre 48
     
    MERCIIIIII franchement grand merci. Pour la faq je suis peut etre passé a coté de l'option je sur le script depuis 8h30 donc je vois plus grand chose.

    Merci a toi Jipicy
    0
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    pour éviter le 0 devant le jour , utiliser %-
    date '+%a %b %-d'
    avec le mois en chiffre:
    $ date '+%a %m %d'
    Wed 02 10
    $ date '+%a %-m %-d'
    Wed 2 10
    $
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Merci.

      Je m'obstinais à chercher la même directive que pour les jours du mois, à savoir "%d = le jour du mois (01..31)" et son pendant "%e = jour du mois ( 1..31)", mais pour les mois de l'année, mais il n'y en a pas ;-((
      0