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 15/06/2007, 12h09   #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] Extraction de champ dans un texte

Ma demande concerne l'extraction de plusieurs champs dans un fichier de setup
J'aimerais realisé cette fonction en Sed ou Awk dans le meilleur des cas.

Apres un bon nombre de moulinettes (le fichier de base etait vraiment tres lourd), le fichier se presente de cette facon (je pourrais si besoin ai fournir une version precedente du fichier peut etre plus facile a exploiter) :

Domaine:"nom de domaine1"
utilisateur1
utilisateur2
....
Domaine:"nom de domaine2"
Domaine:"nom de domaine3"
utilisateur1
utilisateur2
....
Domaine:"nom de domaine4"
Domaine:"nom de domaine5"


L'idée serait d'extraire le nom de domaine pour l'ajouté a la fin de chaque noms d'utilisateurs appartenant a ce domaine afin d'obtenir ceci :

utilisateur1@nom de domaine1
utilisateur2@nom de domaine1
utilisateur1@nom de domaine3
utilisateur2@nom de domaine3


les noms de domaines n'ayant pas d'utilisateurs doivent disparaitre du fichier.

Je recherche donc un script :

- Permettant de supprimer les domaines n'ayant pas d'utilisateurs
- Permettant d'ajouter a chaque utilisateur le nom de son domaine

J'ai deja essayé plusieurs methodes (avec plus ou moins de succees,
... plus de moins d'ailleurs):

compare un champ avec le champ de la ligne suivante affiche si different
awk -F "separateur de champ" '$1 && !n[$1]++' [Fichier]

recherche dans le fichier
awk ' {if ($2=="ce que l'on cherche") {print $1 $2}}' [Fichier]

recherche et destruction au debut des lignes
sed -e "s/^"ce que l'on veux supprimer"*//g" [Fichier]

etc..

j'avance mais lentement... merci d'avance de toute aide
lordduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 21h25   #2
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
Citation:
Envoyé par lordduck
J'aimerais realisé cette fonction en Sed ou Awk dans le meilleur des cas.

Domaine:"nom de domaine1"
utilisateur1
utilisateur2
....
Domaine:"nom de domaine2"
Domaine:"nom de domaine3"
utilisateur1
utilisateur2
....
Domaine:"nom de domaine4"
Domaine:"nom de domaine5"


L'idée serait d'extraire le nom de domaine pour l'ajouté a la fin de chaque noms d'utilisateurs appartenant a ce domaine afin d'obtenir ceci :

utilisateur1@nom de domaine1
utilisateur2@nom de domaine1
utilisateur1@nom de domaine3
utilisateur2@nom de domaine3


Solution en awk

http://lea-linux.org/cached/index/Dev-awk.html

Code :
1
2
3
4
5
6
7
8
9
10
 
awk -F":" '
{
	if ($1 == "Domaine") {
		DomLib=$2		#-- memorisation du nom de domaine
		gsub(/"/,"",DomLib)	#-- elimination des double-quotes
		next                    #-- retour en début de procédure et lecture
	}
	print $1"@"DomLib		#-- Traitement d un utilisateur
} '  fichier
__________________
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 18/06/2007, 08h40   #3
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
Merci a toi ,c'est exactement ce que je voulais.
Simple et efficasse (les "" c'etait pour l'exemple )
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 12h04.


 
 
 
 
Partenaires

Hébergement Web