Partage
  • Partager sur Facebook
  • Partager sur Twitter

Parcourir fichier et supprimer ligne si match

    5 juillet 2018 à 11:19:07

    Bonjour à tous,

    Je possède un fichier de logs qui devient rapidement volumineux. Le but est de gardé toutes les infos datant de moins de 7 jours. Pour cela j'ai voulu écrire un script qui va comparer la date de la ligne et la date du jour (en seconde avec une conversion) et faire la différence. Jusqu'ici ca fonctionne pas mal mais ensuite lorsque la condition est matché la commande sed de ne permet pas de faire ce que j'ai envie...

    time=$(date +%s)
    annee=$(date | awk '{print $6}'| cut -c3-4)
    while IFS= read -r line; do
    	col=$(echo $line | awk '{print $1"-"$2}')
    	fTime=$(date -j -f "%B-%d-%y" "$col"-"$annee" +%s)
    	var=$(($time - $fTime))
    	id=$(nl -ba | awk '{print $1}')
    	if [ $var -gt 604800 ]
    	then
    		sed $id'd'
    	fi
    done < LogFW.txt

    Je pense que je pars un peu dans tous le sens et que c'est pas du tout optimisé mais ca fais 4 jours que je cherche et j'ai toujours pas de solution... Rapidement le script : on crée différente variables permettant la conversion en seconde de la date (chaque ligne du fichier possède la date au début sur les deux premieres colonnes). Puis on lis le fichier et on test chaque ligne si elle possède une date supérieur a 7 jours alors elle est supprimé. Si qq a une idée svp je galère...

    Structure d'une ligne du fichier : Jul   4   00:32:21   FW_TEST_01   em3   match   pass   in   udp   src:192.168.1.2   :63499   dst:192.168.1.3   :53

    Merci d'avance

    -
    Edité par JeanBilly1 5 juillet 2018 à 11:21:37

    • Partager sur Facebook
    • Partager sur Twitter
      5 juillet 2018 à 11:42:47

      salut,

      bon. c'est affreux : la deuxième ligne m'a fait tomber de ma chaise, et le reste m'a déclenché des crises d'épilepsie.

      #!/bin/bash
      
      mv fichier.log /tmp/
      yy=$(date +%Y)
      butoir=$(date +%s -d "7days ago")
      while read -a dat
      do
         test $(date +%s -d "${dat[0]} ${dat[1]} $yy ${dat[3]}") -gt $butoir && echo "${dat[@]}"
      done </tmp/fichier.log >fichier.log

      pas testé, 'faudra peut-être adapter...

      -
      Edité par dantonq 5 juillet 2018 à 19:41:27

      • Partager sur Facebook
      • Partager sur Twitter
      « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
        5 juillet 2018 à 13:11:05

        Salut, merci pour ta réponse rapide même si la gentillesse des gens sur ce forum me fera toujours tombé de ma chaise...

        Peut tu expliquer le code que tu proposes stp ? Je ne comprends pas ce que tu veux faire.

        Par contre il faut du shell et non du bash j'ai oublié de mettre quel interpréteur dans le code.

        Merci

        -
        Edité par JeanBilly1 5 juillet 2018 à 13:12:42

        • Partager sur Facebook
        • Partager sur Twitter
          5 juillet 2018 à 13:57:25

          Salut

          Regarde du coté de logrotate , ça fait tout ce que tu veux .

          A plus

          • Partager sur Facebook
          • Partager sur Twitter
            5 juillet 2018 à 19:41:06

            Peut tu expliquer le code que tu proposes stp

            non, cela t'es laissé à titre d'exercice.

            Par contre il faut du shell

            qu'à cela ne tienne :

            #!/bin/sh
            
            mv fichier.log /tmp/
            yy=$(date +%Y)
            butoir=$(date +%s -d "7days ago")
            while read mois jour heure reste
            do
                test $(date +%s -d "$mois $jour $yy $heure") -gt $butoir && echo "$mois $jour $heure $reste"
            done </tmp/fichier.log >fichier.log
            • Partager sur Facebook
            • Partager sur Twitter
            « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
              6 juillet 2018 à 11:38:30

              Salut, le code ne fonctionne pas et honnêtement je ne vois vraiment pas ce que tu cherches à faire.

              butoir=$(date +%s -d "7days ago")

              je vois pas l'utilité de cette variable et ni le but du while read.

              -
              Edité par JeanBilly1 6 juillet 2018 à 14:02:39

              • Partager sur Facebook
              • Partager sur Twitter
                6 juillet 2018 à 17:03:04

                le code ne fonctionne pas

                « ça marche pas » ne renseigne pas sur ce qu'il se passe, ou pas. :(
                il n'y a pas d'erreur à l'exécution, et les lignes datant de plus de 7 jours ne sont pas affichées.

                je ne vois vraiment pas ce que tu cherches à faire.

                d'après toi ?

                procure-nous un échantillon représentatif de ton fichier, afin de tests "rééls".

                • Partager sur Facebook
                • Partager sur Twitter
                « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                  16 juillet 2018 à 14:52:15

                  Eh bien si il y a une erreur a l'exécution sur quasiment toutes les lignes.  
                  butoir=$(date +%s -d "7days ago")

                  erreur : date: illegal time format

                  Je suis sous FreeBSD, ca peut venir de là. Pour l'échantillon tu peux prendre ce que j'ai donné en exemple et juste changé la date et l'heure.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juillet 2018 à 19:26:48

                    Je suis [SUR]* FreeBSD, ca peut venir de là.

                    oui, ça vient de là.

                    #!/bin/bash
                    
                    printf -v Ep '%(%s)T'
                    dateButoir=$(( Ep - 7*24*60*60))



                    *c'est l'ordinateur qui est SOUS freeBSD

                    • Partager sur Facebook
                    • Partager sur Twitter
                    « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                      24 juillet 2018 à 14:03:54

                      Et toi c'est quoi ton OS ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 juillet 2018 à 14:10:40

                        mon avatar n'est pas suffisamment éloquent ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                          16 mai 2019 à 15:15:48

                          Ouah t'es un mec fun toi
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 mai 2019 à 15:42:55

                            je parle de mon avatar (limage qui "me représente"), et pas de mon pseudo, qu'on s'entende
                            • Partager sur Facebook
                            • Partager sur Twitter
                            « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.

                            Parcourir fichier et supprimer ligne si match

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            • Editeur
                            • Markdown