Parcourir un fichier

Résolu/Fermé
othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    On peut avoir un aperçu du fichier (ou d'une ligne) s'il te plaît ?
    0
  2. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Avec "awk" ça devrait le faire :

      awk -F':'  ' $4 > 16 { print }'  fichier
      0
  3. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    merci pour la reponse juste par rapport a mon script je mets la ligne que t indiqué ou exactement
    dans la boucle?
    merci
    0
  4. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    ben la reponse est simple il falut juste faire
    awk -F':' ' $4 > 20 { print }' yes>testfinale
    franchement merci beaucoup
    0
  7. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  8. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  9. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  10. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaye ça :

      sed -n '/^binding state free/{:z;n;/^hardware/! bz;p}'
      0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    $ 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
  12. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  14. othmane19 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention  
     
    merci pour ta reponse
    je pense que pour l'instant c'est bon
    mais j'ai pas compris le rôle de la fonction strtonum?
    merci d'avance de ton aide
    0
  15. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Merci de rester sur ton autre post.
    0