Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 06/02/2007, 00h45   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 51
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 51
Points : 14
Points : 14
Par défaut comparer dans 2 fichiers

bonjour,

J aimerai essayer de savoir si un un mot present dans un fichier, l est dans l autre.

Voici la structure de mes fichiers :

fichier 1 (file1.txt) :
Code :
1
2
3
4
toto
titi
tata
.....
fichier 2 (file2.txt) :
Code :
1
2
3
4
tutu
tete
toto
.....

pour cela je pansai faire

Code :
cat file1.txt | awk '{v1=$1; while read line; do awk'{ [ v1 -eq $1 ] ; then print v1}}'; done < file2.txt'

je m explique j affiche le contenu de file1.txt vers la sortie standard.
le recupère ligne par ligne grâce a awk, et je stock la valeur $1 dans la variable v1. Ensuite j'ouvre le fichier file2.txt, je recupère ligne par ligne les mots que je compare à v1. Si c'est égale, il m affiche $1.

Or ceci ne marche pas ...

Qulqu un pourrais me dire ou sont les erreurs.
nivose110 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 10h46   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
Aie Aie, syntaxe ....!

ton 'trucs est plutot compliqué !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
bash-3.1$ cat test.fic
toto
titi
tutu
oto
bash-3.1$ cat test1.fic
tuti
toto
otoa
velo
bash-3.1$ cat aa
#!bin/sh
while read ligne
do
        if $(grep -q $ligne test.fic)
        then
                echo $ligne est dans les deux fichiers
        fi
done < test1.fic
bash-3.1$ sh aa
toto est dans les deux fichiers
bash-3.1$
voila c'est, il me semble, plus lisible et plus simple .
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 11h21   #3
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 36
Points : 34
Points : 34
Par défaut Alternative avec join

Hello,

sous réserve que les fichiers puissent être triés, la recherche de mots commun peut être faite avec la commande join.

Code :
1
2
3
4
 
sort file1.txt > file1_sorted.txt
sort file2.txt > file2_sorted.txt
join file1_sorted.txt file2_sorted.txt
Join affiche alors tous les mots communs entre les deux fichiers triés.
MarkH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 00h26   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 51
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 51
Points : 14
Points : 14
merci.
Moi j essayai de le faire en une seul ligne .
un plus comme je debute raison de plus pour le faire sur plusieurs ligne.
nivose110 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 20h51.


 
 
 
 
Partenaires

Hébergement Web