|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour,
J'ai 2 fichiers texte "pilotes" et "machines" contenant chacun des noms de serveurs (un seul nom par ligne) dont voici respectivement le contenu : Fichier "pilotes" : assid01 albidy2 maiss4ips saytyl2 massy54 ......., etc. Fichier "machines" : qunr01n bitric7 assid01 lasmer9 albidy2 zebrai23 albin30 maiss4ips ertibis08 saytyl2 massy54 .........,etc. Le fichier "pilotes" est censé être un sous ensemble de du fichier "machines",... mais on a des surprises ! Globalement il s'agit de comparer ligne par ligne le contenu du fichier "pilotes" avec celui du fichier "machines", autrement dit trouver tous les noms qui se trouvent à la fois dans chacun des 2 fichiers. Mes questions : 1- comment puis-je vérifier qu'il y a pour chaque nom dans "pilotes" le même nom dans "machines"? 2- Puis, si c'est vrai écrire chaque nom trouvé dans un fichier "résultats", et si pour un nom lambda dans "pilotes" on ne trouve pas le même nom dans "machines", on écrit alors une phrase : " le nom : $nom du fichier "pilotes" n'existe pas dans le fichier "machines". D'avance merci de votre aide |
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Ça ne fait exactement ce que tu veux dans la mesure où ça crée 2 fichiers (bon et mauvais), mais ça fait quand même ce que tu demandes : Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
20
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Grand Merci. Ca me donne exactement ce que je voulais !
Mais est ce que je peux avoir tous les résultats dans un seul fichier, de telle sorte que le résultat de votre exeple s'affiche comme suit : Code :
|
||
|
|
10
|
|
|
#4 | ||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 451 ![]() |
Essaye ça (j'ai pas testé) :
Code :
|
||
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Citation:
Il y a aussi l'apostrophe qui pose problème, même en l'échappant je n'arrive pas à la faire accepter, seule solution sortir de sed, la protéger avec des quotes doubles et revenir dans sed : Code :
fgrep -vf machines pilotes | sed 's/.*/le nom : "&" du fichier "pilotes" n'"'"'existe pas dans le fichier "machines"/' >> resultat
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
10
|
|
|
#6 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Je viens de rencontrer un problème :
Est-ce que le fichier "bon" doit contenir le même nombre de ligne (ou de noms) que dans le fichier "pilotes" ? Dans mon cas, l'équivalent du fichier "bon" contient moins de ligne que "pilotes". D'où cela pourrait-il venir à votre avis ? Rechercher dans l'un ou l'autre des fichier est fastidieux, car ce sont des fichiers trop gros... |
|
|
10
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Je te cite :Le fichier "pilotes" est censé être un sous ensemble de du fichier "machines",... mais on a des surprises ! Citation:
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
10
|
|
|
#8 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
C'est ça que je ne comprends pas du tout car un cat du fichier mauvais ne retourne rien ! Et pourtant ne serait-ce en comptant le nombre lignes : j'en ai beaucoup plus dans "pilotes" que dans "bon"...
|
|
|
01
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Dans mon exemple avec les fichiers employés ça marche.
Maintenant sans avoir tous les éléments entre les mains, et notamment les vrais fichiers, je ne sais que te dire
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
10
|
|
|
#10 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Je déviene que ça doit être également le cas si on avait des espaces ou autres dans le fichier "machines" (je testerai plus tard cette hyptothèse Comment peut-on s'en sortir de cette situation de telle sorte que les mots/noms (ou lignes) suivis ou précédés d'un espace/tabulation dans l'un ou l'autre des 2 fichiers à comparer puissent être pris en compte dans tous les cas ? D'avance Merci |
|
|
|
10
|
|
|
#11 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Code :
sed 's/^[ \t]*//;s/[ \t]*$//' fichier_entrée > fichier_sortie
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
|
|
#12 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Deux petites questions au passage : - Comment dois-je faire pour supprimer du fichier "machines" tous les noms qui figurent dans le fichier "pilotes" et écrire le résultat dans un nouveau fichier ? - Supposons que mon fichier "pilotes" est composé de 3 colones de noms séparés par soit des tabulations soit par des espaces simples(ou doubles), comment puis-je : - Supprimer successivement chacune des colones ? ex. : si je supprime la prmière colone, il reste dans mon fichier 2 colones, et ainsi de suite - Récupérer séparément une seule colone et la mettre dans un autre fichier - récupérer seulement 2 colones et les copier dans un fichier, etc. jusqu'à la récupération de la 3ème colone... |
|
|
|
00
|
|
|
#13 | |||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Citation:
Code bash :
Citation:
Code bash :
awk '{print $x}' pilotes >autre_fichier Ca veut dire quoi "jusqu'à la récupération de la 3° colonne" ???
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||
|
|
00
|
|
|
#14 | |||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Citation:
Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
10
|
|
|
#15 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour,
J'apprécie énormément vos petits commentaires explicatifs, ils me permettent vraiment de comprendre de quoi il s'agit, c'est très pédagogique. Je découvre le shell, je suis désolé d'être neuneu.... Je voudrai aussi dire que mes fichiers proviennent pour beaucoup d'Excel, fichiers texte wordpad et notespad, word, etc, c'est pourquoi... Par rapport à ta question, je voudrais juste indiquer une progression dans le precessus de suppression et de récupération des colones : à chaque fois que je récupère (pour copier dans un nouveau fichier) ou que je supprime une colone (jusqu'à la suppression ou la récupération de la 3ème colone), les autres lignes restent comme elle est dans mon fichier pilotes. Je rencontre encore cette situation : mon fichier pilotes comportent 4 colones séparés par 2 à plusieurs tabulations ou espaces. Comment faire pour y supprimer les 2 colones du milieu : a) la 4ème colone se décale pour prendre la place de la 2ème; b) elle ne bouge pas de sa position? |
|
|
00
|
|
|
#16 | ||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Si le fichier Y n'est pas nécessaire, alors on peut combiner les traitements T et T' par des pipes. Citation:
Quand tu dis "supprimer" on comprend "supprimer du fichier d'origine". Mais là, il semblerait que ce soit "supprimer à l'écran" ou plus simplement "afficher d'une certaine façon". Donc là, encore awk Code bash :
awk '{printf("%s %s\n", $1, $4)}' pilotes Code bash :
awk '{printf("%s %s %s %s %s\n", $1, $1, $1, $3, $2)}' pilotes
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||
|
|
00
|
|
|
#17 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Bonjour,
A supposer que les 2 fichiers soient triés, ceci t'affichera les lignes qui n'existent pas dans un ou l'autre des fichiers (mais pas les lignes identiques). La première colonne étant le nom se trouvant dans le fichier 'machines', la 2nde colonne celui se trouvant dans le fichier 'pilotes'. MANQUANT est affiché pour indiquer que le nom n'existe pas dans le fichier de la colonne. Code :
join -i -v1 -v2 -e MANQUANT -j 1 -o 1.1,2.1 machines pilotes Code :
join -i -v1 -v2 -e MANQUANT -j 1 -o 1.1,2.1 <(sort machines) <(sort pilotes) Pour exemple : Code :
|
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com