Parcourir un fichier

Résolu/Fermé
Bonjour,
je suis bloqué dans un truc et j 'espaire avoir votre aide :
en faisant le parcours des ligne d'un fcihier je veux qui'il m'affiche les lignes au fonction d'un criter dans la ligne elle mémé.
voila le script
cat file | while read ligne
do

b=$(tr " " ":"|cut -d: -f4) //exraire un numero dans la ligne

if [ $b -gt 1 ]//si ce num extrait est sup a 1 afficher la ligne
then
echo "$ligne";
fi
done

le probleme c'est que il prend pas en compte la comparaison, du coup il m'affiche aucune ligne
merci de votre aide d'avance.

14 réponses

  1. Contributeur
    Salut,

    On peut avoir un aperçu du fichier (ou d'une ligne) s'il te plaît ?
    0
    1. merci pour ta reponse
      voila en fait les lignes du fichier, dnc le but je voulais aficher les discover d'un serveur DHCP apres un time donne dnc a chaque fois je compare le time (ex:15:00) avec le time actuel
      pour l'instant pour faire simple je compare juste avec 1 histoire de tester le fonctionnent

      merci d'avance

      Apr::4:15:00:11:BABALLE-01:dhcpd::DHCPDISCOVER:from:17:20:d2:2b:f6:1a:via:10.10.11.1
      10
      Apr::4:20:00:11:BABALLE-01:dhcpd::DHCPDISCOVER:from:15:20:d2:2b:f6:1a:via:10.10.11.1
      10
      Apr::4:11:00:11:BABALLE-01:dhcpd::DHCPDISCOVER:from:15:20:d2:2b:f6:1a:via:10.10.11.1
      10
      Apr::4:17:00:11:BABALLE-01:dhcpd::DHCPDISCOVER:from:15:20:d2:2b:f6:1a:via:10.10.11.1
      10
      Apr::4:77:00:11:BABALLE-01:dhcpd::DHCPDISCOVER:from:15:20:d2:2b:f6:1a:via:10.10.11.1
      0
      1. Contributeur
        Avec "awk" ça devrait le faire :

        awk -F':'  ' $4 > 16 { print }'  fichier
        0
    2. merci pour la reponse juste par rapport a mon script je mets la ligne que t indiqué ou exactement
      dans la boucle?
      merci
      0
      1. ah bon j'ai compris
        je pense que c'est bon ca fait bien ce que je veux, juste une dernier question je cherche a ecrire les ligne touvé dans un fichier a part
        j espaire que t une idée?
        merci
        0
        1. ben la reponse est simple il falut juste faire
          awk -F':' ' $4 > 20 { print }' yes>testfinale
          franchement merci beaucoup
          0
          1. Bonjour,
            comment je peux extraire que les adresse MAC ayant free comme state, je sais que je doit passer par des grep et cut et tr,mais je vois pas trop comment faire
            si vous avez une idéé sur comment faire
            merci d'avance de votre aide

            voila l'xemple du fichier:
            lease 192.168.100.2 {
            starts 1 2012/04/02 09:54:36;
            ends 1 2012/04/02 09:55:48;
            tstp 1 2012/04/02 09:55:48;
            cltt 1 2012/04/02 09:54:36;
            binding state free;
            hardware ethernet 00:14:22:c3:38:53;
            uid "\001\000\024\"\3038S";
            }
            lease 192.168.100.14 {
            starts 3 2012/04/04 14:35:26;
            ends 3 2012/04/04 14:36:38;
            cltt 3 2012/04/04 14:35:26;
            binding state active;
            next binding state free;
            hardware ethernet 00:20:d2:2b:f6:1a;
            }
            lease 192.168.100.14 {
            starts 3 2012/04/04 14:36:02;
            ends 3 2012/04/04 14:37:14;
            cltt 3 2012/04/04 14:36:02;
            binding state active;
            next binding state free;
            hardware ethernet 00:20:d2:2b:f6:1a;
            }

            Configuration: Linux / Firefox 3.5.3
            0
            1. Contributeur
              Salut,

              $ cat brol 
              lease 192.168.100.2 {
              starts 1 2012/04/02 09:54:36;
              ends 1 2012/04/02 09:55:48;
              tstp 1 2012/04/02 09:55:48;
              cltt 1 2012/04/02 09:54:36;
              binding state free;
              hardware ethernet 00:14:22:c3:38:53;
              uid "\001\000\024\"\3038S";
              }
              lease 192.168.100.14 {
              starts 3 2012/04/04 14:35:26;
              ends 3 2012/04/04 14:36:38;
              cltt 3 2012/04/04 14:35:26;
              binding state active;
              next binding state free;
              hardware ethernet 00:20:d2:2b:f6:1a;
              }
              lease 192.168.100.14 {
              starts 3 2012/04/04 14:36:02;
              ends 3 2012/04/04 14:37:14;
              cltt 3 2012/04/04 14:36:02;
              binding state active;
              next binding state free;
              hardware ethernet 00:20:d2:2b:f6:1a;
              } 
              
              $ sed -n '/^binding state free/{n;p}' brol 
              hardware ethernet 00:14:22:c3:38:53;
              
              $ 

              ;-))
              0
          2. salut
            merci pour ton aide
            je remplace bien le nom de fichier, mais la commande n'affiche rien en fait
            merci d'avance
            0
            1. Contributeur
              Il n'y aurait pas des tabulations en début de lignes ???

              Mets un exemple du contenu de ton fichier entre les balises <code></code>, comme ceci :

              <code>lease 192.168.100.2 {
              	starts 1 2012/04/02 09:54:36;
              	ends 1 2012/04/02 09:55:48;
              	tstp 1 2012/04/02 09:55:48;
              	cltt 1 2012/04/02 09:54:36;
              	binding state free;
              	hardware ethernet 00:14:22:c3:38:53;
              	uid "\001\000\024\"\3038S";
              }</code>

              Ce qui donnera ceci :
              lease 192.168.100.2 {
              	starts 1 2012/04/02 09:54:36;
              	ends 1 2012/04/02 09:55:48;
              	tstp 1 2012/04/02 09:55:48;
              	cltt 1 2012/04/02 09:54:36;
              	binding state free;
              	hardware ethernet 00:14:22:c3:38:53;
              	uid "\001\000\024\"\3038S";
              }
              0
          3. mais vue que moi je peux pas ajouter cette balise dans mon fichier tu pense
            qui il aurait d'autre moyen pour avoir les adresse MAC qui sont free
            merci d'avance
            0
            1. Contributeur
              Je parlais de l'affichage ici sur le forum ;-\

              Si ton fichier contient des tabulations et que tu fais un copier/coller ici sur le forum sans te servir des balises (voir ce tutoriel), on ne le verra pas ;-(

              Ou alors, mets une copie de ton fichier en téléchargement sur Cjoint.
              0
          4. pour l'info c'est le fichier lease du DHCP qui affiche les adresses libérées
            en fait ce qui se passe avec cette solution c'est qu'on j'ajoute une autre adresse MAC avec un state free dans le fichier:

            lease 192.168.100.14 {
            starts 3 2012/04/04 14:36:02;
            ends 3 2012/04/04 14:37:14;
            cltt 3 2012/04/04 14:36:02;
            binding state free;
            next binding state free;
            hardware ethernet 44:20:d2:2b:f6:1a;
            }

            il m'affiche:

            hardware ethernet 00:14:22:c3:38:53;
            next binding state free;

            donc la solution n'est pas fiable
            merci d'avance pour ta reponse
            0
            1. Contributeur
              Essaye ça :

              sed -n '/^binding state free/{:z;n;/^hardware/! bz;p}'
              0
          5. Contributeur
            $ cat fichier
            lease 192.168.100.14 {
            starts 3 2012/04/04 14:36:02;
            ends 3 2012/04/04 14:37:14;
            cltt 3 2012/04/04 14:36:02;
            binding state free;
            next binding state free;
            hardware ethernet 44:20:d2:2b:f6:1a;
            } 
            $ 
            $ awk -F"[ ;]" '/^binding state free/{x=1} /hardware/ && x {print $3;x=0}' fichier
            44:20:d2:2b:f6:1a
            $ 
            0
            1. Bonjour,
              je voulais afficher que les lignes dont leur time est supérieur a un time donné

              voila le fichier:
              Apr++4+10.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
              Apr++4+09.31.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+19.20.d2.2b.f6.1a+via+10.10.11.1
              Apr++4+11.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
              Apr++4+09.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
              Apr++4+07.45.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1

              quand j'essaie avec cette commande:
              awk -F'+' ' $4 > 10 { print }' tg

              j'ai cette affichage ce qui est bien
              Apr++4+10.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
              Apr++4+11.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1

              mais quand j'essaie d'afficher les ligne avec un time supérieur a 7.00(par exemple)

              awk -F'+' ' $4 > 7.00 { print }' tg

              il affiche rien.
              je voulais savoir c'est quoi le problème.
              merci d'avance de votre aide et de votre compréhension
              0
              1. Contributeur
                avec $4 =10.10.11, ilne doit pas traiter ça comme une valeur numérique
                $ awk -F'+' ' strtonum($4) > 7 { print }' tg
                Apr++4+10.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                Apr++4+09.31.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+19.20.d2.2b.f6.1a+via+10.10.11.1
                Apr++4+11.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                Apr++4+09.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                Apr++4+07.45.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                $ 
                $ 
                $ awk -F'+' ' strtonum($4) > 10 { print }' tg
                Apr++4+10.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                Apr++4+11.10.11+BABALLE-01+dhcpd.+DHCPDISCOVER+from+13.20.d2.2b.f6.1a+via+10.10.11.1
                $ 
                0

                Discussions similaires

                question pix mot caché

                7 réponses