Parcourir un fichier

Résolu/Fermé
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013 - 8 avril 2012 à 15:21
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 avril 2012 à 14:09
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.
A voir également:

14 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
8 avril 2012 à 16:48
Salut,

On peut avoir un aperçu du fichier (ou d'une ligne) s'il te plaît ?
0
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
8 avril 2012 à 22:34
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
8 avril 2012 à 23:06
Avec "awk" ça devrait le faire :

awk -F':'  ' $4 > 16 { print }'  fichier
0
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
8 avril 2012 à 23:31
merci pour la reponse juste par rapport a mon script je mets la ligne que t indiqué ou exactement
dans la boucle?
merci
0
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
8 avril 2012 à 23:35
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
8 avril 2012 à 23:40
ben la reponse est simple il falut juste faire
awk -F':' ' $4 > 20 { print }' yes>testfinale
franchement merci beaucoup
0
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
9 avril 2012 à 12:43
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
9 avril 2012 à 13:08
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
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
9 avril 2012 à 13:23
salut
merci pour ton aide
je remplace bien le nom de fichier, mais la commande n'affiche rien en fait
merci d'avance
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
9 avril 2012 à 13:36
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
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
9 avril 2012 à 14:08
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
9 avril 2012 à 14:12
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
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
9 avril 2012 à 15:48
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
9 avril 2012 à 16:07
Essaye ça :

sed -n '/^binding state free/{:z;n;/^hardware/! bz;p}'
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 avril 2012 à 16:07
$ 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
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
10 avril 2012 à 10:23
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
Modifié par dubcek le 10/04/2012 à 11:04
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
othmane19 Messages postés 96 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 27 avril 2013
10 avril 2012 à 11:26
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
10 avril 2012 à 11:29
Salut,

Ça convertit une chaîne en nombre : http://www.gnu.org/software/gawk/manual/gawk.html#Strtonum-Function
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
10 avril 2012 à 14:09
Merci de rester sur ton autre post.
0