|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 12 ![]() |
Petit probleme de script; je possede 2 fichiers l'un contenant des noms de domaines avec des passerelles, et l'autre contenant des alias de ces noms de domaines.
Les deux fichiers se presentent de cette facon : Alias.txt : DomaineAlias1Truc = DomaineTruc DomaineAlias2Truc = DomaineTruc DomaineAlias1Chtul = DomaineChtul DomaineAlias1Machin = DomaineMachin DomaineAlias2Machin = DomaineMachin ... DomPasserelle.txt : DomaineTruc = Passerelle1 DomaineChtul = Passerelle1 DomaineMachin = Passerelle2 ... J'aimerai maintenant obtenir un fichier se presentant ainsi Result.txt : DomaineAlias1Truc = Passerelle1 DomaineAlias2Truc = Passerelle1 DomaineAlias1Chtul = Passerelle1 DomaineAlias1Machin = Passerelle2 DomaineAlias2Machin = Passerelle2 Ainsi les alias d'un meme domaine pointerai vers la meme passerelle. Voila, j'ai essayé avec des melanges de Sed et d'Awk; en rangeant tout dans des variables, en decoupant par champs etc... mais je bloque un peu J'aimerai donc un ptit coup de pouce pour orienter mes recherches, merci d'avance. |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 12 ![]() |
Finalement j'ai "bricolé" et ca marche, je suppose qu'il y a une solution beaucoup plus esthetique, mais en attendant ca fera l'affaire
Traitement de Alias.txt, inverse les deux champs et rajoute un z apres le = (le z sert pour le | sort ensuite) : awk -F "=" '{print $2 "=z" $1}' Alias.txt | sed -e "s/^ *//g" > ReversAlias.txt Traitement de DomPasserelle.txt , rajoute juste $= apres le premier = pour faciliter la recherche dans le code suivant : awk -F "=" '{print $1 "=$=" $2}' DomPasserelle.txt | sed -e "s/^ *//g" > DomPasserelle2.txt Concatenation des deux fichiers et classement par ordre alphabetique cat ReversAlias.txt DomPasserelle2.txt | sort > Alltest.txt Et enfin le traitement; decoupe chaque lignes en champs (separateur =) si le deuxieme champ contient un $ (et contient donc la passerelle desiré) on ajoute la passerelle aux lignes suivantes jusqu'a la prochaine ligne contenant une passerelle (le reste servant juste a virer l'inutile et presenter comme desiré) : awk -F"=" '{if ($2 == "$") {DomLib=$0 ; next} print $0 "=" DomLib}' Alltest.txt | awk -F "=" '{print $2 "=" $5}' | sed -e "s/^z*//g" > Result.txt Voila j'arrive au bon resultat (au detail pres que c'est rangé dans l'ordre alphabetique) Si quelqu'un trouve plus efficasse ou moins bricolé je suis preneur. |
|
|
00
|
|
|
#3 | ||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
[QUOTE=lordduck]
Result.txt : DomaineAlias1Truc = Passerelle1 DomaineAlias2Truc = Passerelle1 DomaineAlias1Chtul = Passerelle1 DomaineAlias1Machin = Passerelle2 DomaineAlias2Machin = Passerelle2 Ainsi les alias d'un meme domaine pointerai vers la meme passerelle. [QUOTE] Peut-être cette solution sed -f fichier.cmd Alias.txt fichier.cmd contenant les instructions de substitutions suivantes : Code :
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
||
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 12 ![]() |
en effet en generant ton fichier : fichier.cmd avec une commande awk toute bete on arrive au bon resultat.
awk -F "=" '{print "s/" $1 "/" $2 "/"}' DomPasserelle.txt > fichier.cmd sed -f fichier.cmd Alias.txt Merci donc ; beaucoup moins prise de tete que mon bricolage (et vu que je suis stagiaire j'avais un peu peur pour mon successeur |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com