Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/06/2007, 17h35   #1
Invité régulier
 
Inscription : mai 2007
Messages : 12
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2007
Messages : 12
Points : 5
Points : 5
Par défaut [SED - AWK] Concatenation de champs depuis 2 fichiers

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.
lordduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 10h09   #2
Invité régulier
 
Inscription : mai 2007
Messages : 12
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2007
Messages : 12
Points : 5
Points : 5
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.
lordduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 21h55   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
[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 :
1
2
3
4
s/DomaineTruc/Passerelle1/
s/DomaineChtul/Passerelle1/
s/DomaineMachin/Passerelle2/
__________________
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.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 11h15   #4
Invité régulier
 
Inscription : mai 2007
Messages : 12
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2007
Messages : 12
Points : 5
Points : 5
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 )
lordduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h07.


 
 
 
 
Partenaires

Hébergement Web