Recherche occurrence dans fichier
Résolu/Fermé
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
-
4 déc. 2014 à 12:23
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 5 déc. 2014 à 16:30
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 5 déc. 2014 à 16:30
A voir également:
- Recherche occurrence dans fichier
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
11 réponses
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
4 déc. 2014 à 12:29
4 déc. 2014 à 12:29
hello
en shell ou en PHP ?
en shell ou en PHP ?
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
4 déc. 2014 à 13:21
4 déc. 2014 à 13:21
Bonjour dubcek,
en Shell de préférence, voir python, mais j'ai déjà commencé un script bash qui utilise "expect" pour récupérer les valeurs directement du switch.
Merci,
en Shell de préférence, voir python, mais j'ai déjà commencé un script bash qui utilise "expect" pour récupérer les valeurs directement du switch.
Merci,
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
4 déc. 2014 à 14:48
4 déc. 2014 à 14:48
$ PortOuvert=VLAN1
$ awk -F "[<>]" -v p="$PortOuvert" '$0 ~ p {printf $4 OFS; getline; print; exit}' fichier
n° TAG <port1>, <port3>, <port4>, etc...
$ PortOuvert=VLAN2
$ awk -F "[<>]" -v p="$PortOuvert" '$0 ~ p {printf $4 OFS; getline; print; exit}' fichier
n° TAG <port2>, <port5>, ...
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
Modifié par aurelazy le 4/12/2014 à 14:58
Modifié par aurelazy le 4/12/2014 à 14:58
Merci pour ta réponse dubcek,
Mais en fait c'est le contraire dont j'ai besoin ;-)
j'ai tous mes ports dans $PortOuvert (=> ge-0/0/15, ge-0/0/35, ...)
et je voudrais récupérer le nom du VLAN et le TAG pour chacun de ces ports
J'ai trouvé quelque chose mais je n'arrive pas à avoir le rendu que je veux:
le résultat est :
Alors que je veux le n° de port (ge-0/0/x) à la place de mon "$VAR"
Je ne comprends pas pourquoi $VAR ne contient pas $elem !!
Merci d'avance,
Well, if it looks like a duck, swims like a duck, and quacks like a duck, it's probably a duck.
Mais en fait c'est le contraire dont j'ai besoin ;-)
j'ai tous mes ports dans $PortOuvert (=> ge-0/0/15, ge-0/0/35, ...)
et je voudrais récupérer le nom du VLAN et le TAG pour chacun de ces ports
J'ai trouvé quelque chose mais je n'arrive pas à avoir le rendu que je veux:
for elem in $PortOuvert do ligne=`grep -n "$elem" fichier_VLAN | cut -d: -f1` ligne=$(($ligne-1)) head -$ligne < fichier_VLAN | tail -1 | awk -v VAR="$elem" '{ print $1";"$2";"$VAR }' done
le résultat est :
<nom_VLAN>;<n° TAG>;<nom_VLAN> <n° TAG>
Alors que je veux le n° de port (ge-0/0/x) à la place de mon "$VAR"
Je ne comprends pas pourquoi $VAR ne contient pas $elem !!
Merci d'avance,
Well, if it looks like a duck, swims like a duck, and quacks like a duck, it's probably a duck.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
4 déc. 2014 à 15:03
4 déc. 2014 à 15:03
Cool, j'ai trouvé !! Au lieu de $VAR il faut utiliser VAR tout court ;-)
Merci à toi dubcek pour ton aide
Si vous avez d'autres idées plus courtes et plus simple merci de me tenir au courant ;-)
Bonne journée à tous,
Merci à toi dubcek pour ton aide
Si vous avez d'autres idées plus courtes et plus simple merci de me tenir au courant ;-)
Bonne journée à tous,
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
4 déc. 2014 à 15:26
4 déc. 2014 à 15:26
comme ca ?
$ PO="port3 port5"; awk -v po="${PO/ /|}" '/nom/ {lan=$0} $0 ~ po { print lan}' fichier
<nom VLAN1> <n° TAG>
<nom VLAN2> <n° TAG>
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
5 déc. 2014 à 08:07
5 déc. 2014 à 08:07
modifier
par
po="${PO/ /|}"
par
po="${PO// /|}"
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
5 déc. 2014 à 09:12
5 déc. 2014 à 09:12
Bonjour dubcek,
Cela ne fonctionne pas.
A quoi correspond po="${PO// /|}" ?
Merci toi ;-)
Cela ne fonctionne pas.
A quoi correspond po="${PO// /|}" ?
Merci toi ;-)
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
5 déc. 2014 à 10:44
5 déc. 2014 à 10:44
remplacer les espaces dans la variabe par des | pour que awk cherche port3 OU port5 OU etc
montre un exemple de données
montre un exemple de données
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
5 déc. 2014 à 11:10
5 déc. 2014 à 11:10
echo $ports
=> ge-0/0/0 ge-0/0/9 ge-0/0/2 ge-0/0/4
voila pour la variable avec mes ports,
mon fichier (tiré d'un routeur Juniper, avec un "show vlans sort-by tag":
Le retour doit être:
ge-0/0/0,VLAN2,512
ge-0/0/9,VLAN3,513
ge-0/0/2,VLAN2,512
ge-0/0/4,VLAN1,510
Voila j'espère que c'est plus compréhensible ;-)
Et encore merci à toi !!
=> ge-0/0/0 ge-0/0/9 ge-0/0/2 ge-0/0/4
voila pour la variable avec mes ports,
mon fichier (tiré d'un routeur Juniper, avec un "show vlans sort-by tag":
SUP 100
ge-0/0/23.0, ge-0/0/3.0, ge-0/0/15.0
VLAN1 510
ge-0/0/1.0, ge-0/0/4.0*, ge-0/0/25.0
VLAN2 512
ge-0/0/0.0*, ge-0/0/2.0*
VLAN3 513
ge-0/0/9.0*, ge-0/0/8.0
Le retour doit être:
ge-0/0/0,VLAN2,512
ge-0/0/9,VLAN3,513
ge-0/0/2,VLAN2,512
ge-0/0/4,VLAN1,510
Voila j'espère que c'est plus compréhensible ;-)
Et encore merci à toi !!
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
Modifié par dubcek le 5/12/2014 à 12:19
Modifié par dubcek le 5/12/2014 à 12:19
p=a[l] "[.]"j'ajoute un point au port à chercher parce que ge-0/0/2 est contenu dans ge-0/0/23.0
$ PO="ge-0/0/0 ge-0/0/9 ge-0/0/2 ge-0/0/4"
$ awk -v po="$PO" 'BEGIN {n=split(po, a); s=","} /^[A-Z]/ {v=$1; t=$2; next} {for(l=1; l<=n; l++){p=a[l] "[.]"; if($0 ~ p)print a[l] s v s t}}' fichier
ge-0/0/4,VLAN1,510
ge-0/0/0,VLAN2,512
ge-0/0/2,VLAN2,512
ge-0/0/9,VLAN3,513
aurelazy
Messages postés
190
Date d'inscription
vendredi 21 février 2014
Statut
Membre
Dernière intervention
30 janvier 2015
50
5 déc. 2014 à 15:03
5 déc. 2014 à 15:03
Salut dubcek,
Ca fonctionne super bien ;-)
Par contre, je ne comprends pas tout, ça va me permettre de bosser un peu mon AWK.
Merci beaucoup
Bonne nuit,
Ca fonctionne super bien ;-)
Par contre, je ne comprends pas tout, ça va me permettre de bosser un peu mon AWK.
Merci beaucoup
Bonne nuit,
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
5 déc. 2014 à 16:30
5 déc. 2014 à 16:30
détails:
BEGIN {n=split(po, a); s=","} on remplit un tableau a avec chaque port à chercher dans la variable po qui contient PO, n est le nombre de ports
/^[A-Z]/ {v=$1; t=$2; next} pour chaque ligne qui commence par une maj, on sauve v=vlan, champ 1, t = tag, champ 2
for(l=1; l<=n; l++){p=a[l] "[.]" pour chaque port dans le tableau a on ajoute un point
if($0 ~ p)print a[l] s v s t} si la ligne contient ce port, on affiche : port, vlan, tag (s=virgule)