Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
Tahar
--0-589268827-1207664734=:18792
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

J'ai pens=E9 =E0 diff, mais =E7a ne me donne pas le r=E9sultat que je voudr=
ais avoir en sortie, car je veux uniquement la liste des =E9l=E9ments pr=E9=
sents dans les deux fichiers uniquement=0A=0A----- Message d'origine ----=
=0ADe : Ludovic Cesar <Ludovic.Cesar@fedasil.be>=0A=C0 : Tahar <tahar_ba@ya=
hoo.fr>=0ACc : DEBIAN <debian-user-french@lists.debian.org>=0AEnvoy=E9 le :=
Mardi, 8 Avril 2008, 16h12mn 21s=0AObjet : RE [BASH] probl=E8me avec un s=
cript=0A=0A=0ASalut,=0A=0ANe pourrais-tu pas t'en sortir avec la commande"d=
iff" ?=0A=0A=0ALudo=0A=0A=0A=0A=0ATahar <tahar_ba@yahoo.fr>08/04/2008 15:45=
=0AA=0ADEBIAN <debian-user-french@lists.debian.org>cc=0A=0AObjet=0A[BASH] p=
robl=E8me avec un script=0A=0A=0A=0A=0A=0A=0ABonjour =E0 tous,=0A=0AJe disp=
ose de deux documents que je voudrais comparer, c'est =E0 dire jevoudrais s=
avoir quelle ligne du premier se trouve dans le second le r=E9sultatest red=
irig=E9 vers un fichier. j'ai utilis=E9 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=E9e qui existe dans les deuxfichiers (u=
ne entr=E9e que j'ai rajout=E9 manuellement dans les deux pour mestests)=0A=
=0AVoici le script que j'avais =E9cris=0A=0A#!/bin/bash=0Awhile read line=
=0Ado=0A grep $line fichier1 >> comp_result=0Adone < fichier2=0A=0AJe ne=
sais pas ce qui coche, =E7a ne marche pas, quand je mets grep -w "$line"j'=
ai toujours aucun r=E9sultat comme si aucune entr=E9e du premier fichiern'e=
xiste dans le second.=0A=0AMerci pour votre aide=0A=0A=0A=0A
--0-589268827-1207664734=:18792
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

<html><head><style type=3D"text/css"><!-- DIV {margin:0px;} --></style></he=
ad><body><div style=3D"font-family:times new roman, new york, times, serif;=
font-size:12pt"><div style=3D"font-family: times new roman,new york,times,s=
erif; font-size: 12pt;">J'ai pens=E9 =E0 diff, mais =E7a ne me donne pas le=
r=E9sultat que je voudrais avoir en sortie, car je veux uniquement la list=
e des =E9l=E9ments pr=E9sents dans les deux fichiers uniquement<br><br><div=
style=3D"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>=C0 : Tahar &lt;tahar_ba@yahoo.fr&gt;<br>Cc : DEBIAN &lt;de=
bian-user-french@lists.debian.org&gt;<br>Envoy=E9 le : Mardi, 8 Avril 2008,=
16h12mn 21s<br>Objet&nbsp;: RE [BASH] probl=E8me avec un script<br><br>=
=0A<br><font face=3D"Arial" size=3D"2">Salut,</font>=0A<br>=0A<br><font fac=
e=3D"Arial" size=3D"2">Ne pourrais-tu pas t'en sortir avec la commande=0A"<=
b>diff</b>" ?</font>=0A<br>=0A<br>=0A<br><font face=3D"Arial" size=3D"2">Lu=
do</font>=0A<br>=0A<br>=0A<br>=0A<br>=0A<br>=0A<table width=3D"100%">=0A<tb=
ody><tr valign=3D"top">=0A<td width=3D"40%"><font face=3D"sans-serif" size=
=3D"1"><b>Tahar &lt;tahar_ba@yahoo.fr&gt;</b>=0A</font>=0A<p><font face=3D"=
sans-serif" size=3D"1">08/04/2008 15:45</font>=0A</p></td><td width=3D"59%"=
>=0A<table width=3D"100%">=0A<tbody><tr>=0A<td>=0A<div align=3D"right"><fon=
t face=3D"sans-serif" size=3D"1">A</font></div>=0A</td><td valign=3D"top"><=
font face=3D"sans-serif" size=3D"1">DEBIAN &lt;debian-user-french@lists.deb=
ian.org&gt;</font>=0A</td></tr><tr>=0A<td>=0A<div align=3D"right"><font fac=
e=3D"sans-serif" size=3D"1">cc</font></div>=0A</td><td valign=3D"top">=0A<b=
r></td></tr><tr>=0A<td>=0A<div align=3D"right"><font face=3D"sans-serif" si=
ze=3D"1">Objet</font></div>=0A</td><td valign=3D"top"><font face=3D"sans-se=
rif" size=3D"1">[BASH] probl=E8me avec un script</font></td></tr></tbody></=
table>=0A<br>=0A<table>=0A<tbody><tr valign=3D"top">=0A<td>=0A<br></td><td>=
<br></td></tr></tbody></table>=0A<br></td></tr></tbody></table>=0A<br>=0A<b=
r>=0A<br><font face=3D"Times" size=3D"3">Bonjour =E0 tous,<br>=0A<br>=0AJe =
dispose de deux documents que je voudrais comparer, c'est =E0 dire je=0Avou=
drais savoir quelle ligne du premier se trouve dans le second le r=E9sultat=
=0Aest redirig=E9 vers un fichier. j'ai utilis=E9 grep dans une boucle whil=
e pour=0Acela, mais j'ai souvent le message file not found ou bien rien du =
tout=0Aalors que je suis certain qu'il y a une entr=E9e qui existe dans les=
deux=0Afichiers (une entr=E9e que j'ai rajout=E9 manuellement dans les deu=
x pour mes=0Atests)<br>=0A<br>=0AVoici le script que j'avais =E9cris<br>=0A=
<br>=0A#!/bin/bash<br>=0Awhile read line<br>=0Ado<br>=0A &nbsp; &nbsp;grep =
$line fichier1 &gt;&gt; comp_result<br>=0Adone &lt; fichier2<br>=0A<br>=0AJ=
e ne sais pas ce qui coche, =E7a ne marche pas, quand je mets grep -w "$lin=
e"=0Aj'ai toujours aucun r=E9sultat comme si aucune entr=E9e du premier fic=
hier=0An'existe dans le second.<br>=0A<br>=0AMerci pour votre aide</font>=
=0A<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

7 réponses

Avatar
fra-duf-no-spam
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ô -+-
Avatar
Eddy Touati
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
Avatar
Jacques L'helgoualc'h
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
Avatar
Yves Rutschle
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
Avatar
Jacques L'helgoualc'h
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
Avatar
fra-duf-no-spam
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 ^^
Avatar
Jacques L'helgoualc'h
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