Re : RE [BASH] problème avec un script

Le
Tahar
--0-589268827-1207664734=:18792
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

J'ai pensé à diff, mais ça ne me donne pas le résultat que je voudr=
ais avoir en sortie, car je veux uniquement la liste des éléments pré=
sents dans les deux fichiers uniquement -- Message d'origine -=
De : Ludovic Cesar <Ludovic.Cesar@fedasil.be> À : Tahar <tahar_ba@ya=
hoo.fr> Cc : DEBIAN <debian-user-french@lists.debian.org> Envoyé le :=
Mardi, 8 Avril 2008, 16h12mn 21s Objet : RE [BASH] problème avec un s=
cript Salut, Ne pourrais-tu pas t'en sortir avec la commande"d=
iff" ? Ludo Tahar <tahar_ba@yahoo.fr>08/04/2008 15:45=
A DEBIAN <debian-user-french@lists.debian.org>cc Objet [BASH] p=
roblème avec un script Bonjour à tous, Je disp=
ose de deux documents que je voudrais comparer, c'est à dire jevoudrais s=
avoir quelle ligne du premier se trouve dans le second le résultatest red=
irigé vers un fichier. j'ai utilisé grep dans une boucle while pourcela=
, mais j'ai souvent le message file not found ou bien rien du toutalors que=
je suis certain qu'il y a une entrée qui existe dans les deuxfichiers (u=
ne entrée que j'ai rajouté manuellement dans les deux pour mestests) =
Voici le script que j'avais écris #!/bin/bash while read line=
do grep $line fichier1 >> comp_result done < fichier2 Je ne=
sais pas ce qui coche, ça ne marche pas, quand je mets grep -w "$line"j'=
ai toujours aucun résultat comme si aucune entrée du premier fichiern'e=
xiste dans le second. Merci pour votre aide
--0-589268827-1207664734=:18792
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></he=
ad><body><div style="font-family:times new roman, new york, times, serif;=
font-size:12pt"><div style="font-family: times new roman,new york,times,s=
erif; font-size: 12pt;">J'ai pensé à diff, mais ça ne me donne pas le=
résultat que je voudrais avoir en sortie, car je veux uniquement la list=
e des éléments présents dans les deux fichiers uniquement<br><br><div=
style="font-family: times new roman,new york,times,serif; font-size: 12p=
t;">-- Message d'origine -<br>De : Ludovic Cesar &lt;Ludovic.Cesar@fe=
dasil.be&gt;<br>À : Tahar &lt;tahar_ba@yahoo.fr&gt;<br>Cc : DEBIAN &lt;de=
bian-user-french@lists.debian.org&gt;<br>Envoyé le : Mardi, 8 Avril 2008,=
16h12mn 21s<br>Objet&nbsp;: RE [BASH] problème avec un script<br><br>=
<br><font face="Arial" size="2">Salut,</font> <br> <br><font fac=
e="Arial" size="2">Ne pourrais-tu pas t'en sortir avec la commande "<=
b>diff</b>" ?</font> <br> <br> <br><font face="Arial" size="2">Lu=
do</font> <br> <br> <br> <br> <br> <table width="100%"> <tb=
ody><tr valign="top"> <td width="40%"><font face="sans-serif" size=
="1"><b>Tahar &lt;tahar_ba@yahoo.fr&gt;</b> </font> <p><font face="=
sans-serif" size="1">08/04/2008 15:45</font> </p></td><td width="59%"=
> <table width="100%"> <tbody><tr> <td> <div align="right"><fon=
t face="sans-serif" size="1">A</font></div> </td><td valign="top"><=
font face="sans-serif" size="1">DEBIAN &lt;debian-user-french@lists.deb=
ian.org&gt;</font> </td></tr><tr> <td> <div align="right"><font fac=
e="sans-serif" size="1">cc</font></div> </td><td valign="top"> <b=
r></td></tr><tr> <td> <div align="right"><font face="sans-serif" si=
ze="1">Objet</font></div> </td><td valign="top"><font face="sans-se=
rif" size="1">[BASH] problème avec un script</font></td></tr></tbody></=
table> <br> <table> <tbody><tr valign="top"> <td> <br></td><td>=
<br></td></tr></tbody></table> <br></td></tr></tbody></table> <br> <b=
r> <br><font face="Times" size="3">Bonjour à tous,<br> <br> Je =
dispose de deux documents que je voudrais comparer, c'est à dire je vou=
drais savoir quelle ligne du premier se trouve dans le second le résultat=
est redirigé vers un fichier. j'ai utilisé grep dans une boucle whil=
e pour cela, mais j'ai souvent le message file not found ou bien rien du =
tout alors que je suis certain qu'il y a une entrée qui existe dans les=
deux fichiers (une entrée que j'ai rajouté manuellement dans les deu=
x pour mes tests)<br> <br> Voici le script que j'avais écris<br> =
<br> #!/bin/bash<br> while read line<br> do<br> &nbsp; &nbsp;grep =
$line fichier1 &gt;&gt; comp_result<br> done &lt; fichier2<br> <br> J=
e ne sais pas ce qui coche, ça ne marche pas, quand je mets grep -w "$lin=
e" j'ai toujours aucun résultat comme si aucune entrée du premier fic=
hier n'existe dans le second.<br> <br> Merci pour votre aide</font>=
<br></div><br></div></div></body></html>
--0-589268827-1207664734=:18792--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
fra-duf-no-spam
Le #9691541
Le 13977ième jour après Epoch,
Tahar écrivait:

J'ai pensé à diff, mais ça ne me donne pas le résulta t que je
voudrais avoir en sortie, car je veux uniquement la liste des
éléments présents dans les deux fichiers uniquement



Dans ce cas, un truc du genre:

cat <(sort f1|uniq) <(sort f2|uniq)|sort|uniq -c|grep -v "^ *1 *"|sed -e 's / *[0-9]+ *//'


--
Je sors dehors
Le vent du printemps s'est pris
Dans les saules
-+- Chodô -+-
Eddy Touati
Le #9691501
Sinon il y a toujours la solution perl

#!/usr/bin/perl
-w

use
strict;

my ($file1,$file2) =
@ARGV;

my
$ligne;

open(FILE1,"$file1");

foreach(<FILE1>){

$ligne =
$_;


open(FILE2,"$file2");


foreach(<FILE2>){

if($ligne eq
$_){


print;


}


}

close
(FILE2);

}

close(FILE1);



François TOURDE a écrit :
Le 13977ième jour après Epoch,
Tahar écrivait:


J'ai pensé à diff, mais ça ne me donne pas le résultat que je
voudrais avoir en sortie, car je veux uniquement la liste des
éléments présents dans les deux fichiers uniquement




Dans ce cas, un truc du genre:

cat <(sort f1|uniq) <(sort f2|uniq)|sort|uniq -c|grep -v "^ *1 *"|sed -e 's/ *[0-9]+ *//'







--
Le progrès technique est comme une hache qu'on aurait mis dans les mains d'un psychopathe

(Albert Einstein)

--

Si vous ne pouvez expliquer un concept à un enfant de six ans,
c'est que vous ne le comprenez pas complètement.

(Albert Einstein)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Jacques L'helgoualc'h
Le #9690241
François TOURDE a écrit, mardi 8 avril 2008, à 17:13 :
[...]
cat <(sort f1|uniq) <(sort f2|uniq)|sort|uniq -c|grep -v "^ *1 *"|sed -e 's/ *[0-9]+ *//'



{ sort -u fic1; sort -u fic2; }|sort|uniq -d

ou encore (pas de tri) :

{ awk '!n[$0]++' fic1 ; awk '!n[$0]++' fic2 ; } | awk 'n[$0]++'

qu'on peut regrouper.
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Yves Rutschle
Le #9690091
On Tue, Apr 08, 2008 at 07:58:20PM +0200, Jacques L'helgoualc'h wrote:
{ sort -u fic1; sort -u fic2; }|sort|uniq -d



Wow. J'ai une solution en 2 lignes de perl:

my %f1 = map { $_ => 1 } `cat $ARGV[0]`;
print grep { $f1{$_} } `cat $ARGV[1]`;

mais tu gagnes de loin. Élegant et court :)

Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Jacques L'helgoualc'h
Le #9690061
Yves Rutschle a écrit, mercredi 9 avril 2008, à 10:23 :
On Tue, Apr 08, 2008 at 07:58:20PM +0200, Jacques L'helgoualc'h wrote:
> { sort -u fic1; sort -u fic2; }|sort|uniq -d

Wow. J'ai une solution en 2 lignes de perl:

my %f1 = map { $_ => 1 } `cat $ARGV[0]`;
print grep { $f1{$_} } `cat $ARGV[1]`;

mais tu gagnes de loin. Élegant et court :)



Merci, mais j'ai juste élagué la solution de François Tourde ; le triple
awk, analogue à ta solution, évite les tris inutiles.
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
fra-duf-no-spam
Le #9689861
Le 13978ième jour après Epoch,
Jacques L'helgoualc'h écrivait:

Yves Rutschle a écrit, mercredi 9 avril 2008, à 10:23 :
On Tue, Apr 08, 2008 at 07:58:20PM +0200, Jacques L'helgoualc'h wrote:
> { sort -u fic1; sort -u fic2; }|sort|uniq -d

Wow. J'ai une solution en 2 lignes de perl:

my %f1 = map { $_ => 1 } `cat $ARGV[0]`;
print grep { $f1{$_} } `cat $ARGV[1]`;

mais tu gagnes de loin. Élegant et court :)



Merci, mais j'ai juste élagué la solution de François Tour de ; le triple
awk, analogue à ta solution, évite les tris inutiles.



Mais ta solution a l'avantage de montrer qu'en lisant un peu plus
attentivement la doc des filtres, on a souvent toutes les réponses aux
questions qu'on se pose ;)

Élagons, élagons, il en restera toujours quelque chose ^^
Jacques L'helgoualc'h
Le #9689801
François TOURDE a écrit, jeudi 10 avril 2008, à 11:29 :
Le 13978ième jour après Epoch, Jacques L'helgoualc'h écrivait:
> Yves Rutschle a écrit, mercredi 9 avril 2008, à 10:23 :
>> On Tue, Apr 08, 2008 at 07:58:20PM +0200, Jacques L'helgoualc'h wrote:
>> > { sort -u fic1; sort -u fic2; }|sort|uniq -d
>>
>> Wow. J'ai une solution en 2 lignes de perl:
>>
>> my %f1 = map { $_ => 1 } `cat $ARGV[0]`;
>> print grep { $f1{$_} } `cat $ARGV[1]`;
>>
>> mais tu gagnes de loin. Élegant et court :)
>
> Merci, mais j'ai juste élagué la solution de François Tourde ; le triple
> awk, analogue à ta solution, évite les tris inutiles.

Mais ta solution a l'avantage de montrer qu'en lisant un peu plus
attentivement la doc des filtres, on a souvent toutes les réponses aux
questions qu'on se pose ;)



Ben oui, --help c'est utile :)

Élagons, élagons, il en restera toujours quelque chose ^^



Si mes souvenirs sont bons, dans le sketch des oranges de Fernand
Raynaud il ne reste plus grand-chose à la fin...
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Publicité
Poster une réponse
Anonyme