Test sur une liste de nom.prenom ds 1 fichier
tchobec
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
Je vais essayer de vous exposer clairement ce que je souhaite faire en tant que débutant dans les scripts sous linux.
Je possède un fichier dans lequel sont enregistrés la liste des personnes de mon entreprise sous la forme "nom.prenom" ou "prenom.nom".
Je possède un proxy internet dans lequel chacun possède un compte de connexion sous la forme "nom.prenom:mdp" ou "prenom.nom:mdp" dans un fichier de config.
Je souhaite comparer le contenu de la liste du personnel avec celui du fichier de config du proxy et supprimer dans ce dernier les comptes qui ne sont plus existant dans le premier (afin de supprimer les accès des personnels n'existant plus dans l'entreprise).
Ce que j'ai déjà fais :
Récupération des valeurs de chaque champ et affectation à plusieurs variables avec la commande "read" pour un affichage à l'écran.
#! /bin/sh
while IFS=:"." read nom prenom
do
echo -e "Nom : $nom\n
Prenom : $prenom\n\n"
done </scripts/listecomtpesproxy
Ce que je souhaite faire mais n'y arrive pas en rappelant les variables $nom et $prenom pour chaque ligne lue : Rechercher dans le fichier "listepersonnel" si les comptes existant dans le fichier de "listecomptesproxy" s'y trouvent et supprimer les comptes superflues dans le proxy par rapport au contenu de la liste du personnel.
soit :
si "test" (grep par exemple) de $nom =1
{ si "test" $nom.$prenom =1
l=l+1 (passage à la ligne suivante)
sinon si "test" de $prenom.$nom=1
l=l+1
sinon suppression de la ligne dans "listecomptesproxy" (ou mise en comentaire)
}
J'espère que mon explication est suffisemment clair, j'ai seulement quelques soucis avec les commandes les plus adéquats à choisir pour faire quelque chose d'optimisé.
Merci d'avance pour votre aide.
Je vais essayer de vous exposer clairement ce que je souhaite faire en tant que débutant dans les scripts sous linux.
Je possède un fichier dans lequel sont enregistrés la liste des personnes de mon entreprise sous la forme "nom.prenom" ou "prenom.nom".
Je possède un proxy internet dans lequel chacun possède un compte de connexion sous la forme "nom.prenom:mdp" ou "prenom.nom:mdp" dans un fichier de config.
Je souhaite comparer le contenu de la liste du personnel avec celui du fichier de config du proxy et supprimer dans ce dernier les comptes qui ne sont plus existant dans le premier (afin de supprimer les accès des personnels n'existant plus dans l'entreprise).
Ce que j'ai déjà fais :
Récupération des valeurs de chaque champ et affectation à plusieurs variables avec la commande "read" pour un affichage à l'écran.
#! /bin/sh
while IFS=:"." read nom prenom
do
echo -e "Nom : $nom\n
Prenom : $prenom\n\n"
done </scripts/listecomtpesproxy
Ce que je souhaite faire mais n'y arrive pas en rappelant les variables $nom et $prenom pour chaque ligne lue : Rechercher dans le fichier "listepersonnel" si les comptes existant dans le fichier de "listecomptesproxy" s'y trouvent et supprimer les comptes superflues dans le proxy par rapport au contenu de la liste du personnel.
soit :
si "test" (grep par exemple) de $nom =1
{ si "test" $nom.$prenom =1
l=l+1 (passage à la ligne suivante)
sinon si "test" de $prenom.$nom=1
l=l+1
sinon suppression de la ligne dans "listecomptesproxy" (ou mise en comentaire)
}
J'espère que mon explication est suffisemment clair, j'ai seulement quelques soucis avec les commandes les plus adéquats à choisir pour faire quelque chose d'optimisé.
Merci d'avance pour votre aide.
A voir également:
- Test sur une liste de nom.prenom ds 1 fichier
- Test performance pc - Guide
- Fichier bin - Guide
- Liste déroulante excel - Guide
- Fichier epub - Guide
- Fichier rar - Guide
2 réponses
Bonsoir,
Peut-être que le script suivant t'arrangera:
Pour tout les lignes du fichier des comptes du proxy (mot de passe enlevé (cut -f1 -d':' n'affiche que le champ 1 avec comme séarateur de champ le ":")) on assigne la partie de la ligne avant le "." au nom, et la partie aprés le point au prénom.
Si, on trouve nom.prenom ou prenom.nom (le pipe "|" dans egrep signifie OU) dans la liste du personnel on ne fait rien, SINON ("||" en bash) on appel sed et on lui demande de remplacer dans le fichier listecompteproxy.resultat "$nom.$prenom" par "#$nom.$prenom" et "$prenom.$nom" par "#$prenom.nom".
La redirection vers /dev/null (>/dev/null 2>&1) permet de ne pas afficher le resultat de grep (on s'en moque on veut simplement savoir si oui ou non le grep a trouver quelque chose...)
NOTA: je considère que les fichiers sont dédoublonnés, sinon, ça risque de faire des trucs bizarre ;-)
Si tu as besoin de plus d'info sur les commandes utilisées, tu as biensur les man, mais n'hésite pas a redemander dans ce message.
PS: c'est une solution, mais il y en a plein d'autres! ;)
++
Peut-être que le script suivant t'arrangera:
#!/bin/bash for ligne in $(cut -f1 -d':' listecomptesproxy ); do nom=${ligne/.*/} prenom=${ligne/*./} cp listecomptesproxy listecomptesproxy.resultat egrep "$nom.$prenom|$prenom.$nom" listepersonnel >/dev/null 2>&1 || sed -i -e "s/\($nom.$prenom\)/#\1/" -e "s/\($prenom.$nom\)/#\1/" listecomptesproxy.resultat doneEn gros:
Pour tout les lignes du fichier des comptes du proxy (mot de passe enlevé (cut -f1 -d':' n'affiche que le champ 1 avec comme séarateur de champ le ":")) on assigne la partie de la ligne avant le "." au nom, et la partie aprés le point au prénom.
Si, on trouve nom.prenom ou prenom.nom (le pipe "|" dans egrep signifie OU) dans la liste du personnel on ne fait rien, SINON ("||" en bash) on appel sed et on lui demande de remplacer dans le fichier listecompteproxy.resultat "$nom.$prenom" par "#$nom.$prenom" et "$prenom.$nom" par "#$prenom.nom".
La redirection vers /dev/null (>/dev/null 2>&1) permet de ne pas afficher le resultat de grep (on s'en moque on veut simplement savoir si oui ou non le grep a trouver quelque chose...)
NOTA: je considère que les fichiers sont dédoublonnés, sinon, ça risque de faire des trucs bizarre ;-)
Si tu as besoin de plus d'info sur les commandes utilisées, tu as biensur les man, mais n'hésite pas a redemander dans ce message.
PS: c'est une solution, mais il y en a plein d'autres! ;)
++
Salut,
$ cat listepersonnel titi.aaa tete.ccc tutu.eee $ cat listecompteproxy titi.aaa:jgkjiofgu toto.bbb:yuyuiyui tete.ccc:jekj2sdf tata.ddd:uiouiohjk tutu.eee:2ds5Adf $ for i in $(cat listecompteproxy|cut -d':' -f1|comm -2 listepersonnel -);do grep $i listecompteproxy;done titi.aaa:jgkjiofgu tete.ccc:jekj2sdf tutu.eee:2ds5Adf