Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/12/2009, à 05:23

moi.néo

[Résolu] Aide script shell

Salut à tous.
Je vais expliquer ce que je cherche à faire sur un exemple.
J'ai 2 fichiers a et b.
Le fichier a contient les données :

1 56
2 45
3 23
4 50
5 12

Le fichier b contient les données :

1 67
2 49
4 90
5 88

La première colonne spécifie un chiffre (cette colonne est déjà triée par ordre croissant), la deuxième une donnée quelconque.
Ce que je souhaite faire, c'est que les 2 fichiers contiennent la même première colonne.
Donc on se retrouverait avec des fichiers a et b comme suit :

1 56
2 45
4 50
5 12

Le fichier b contient les données :

1 67
2 49
4 90
5 88

La ligne 3 du fichier a a été supprimée car 3 n'est pas dans la première colonne du fichier b.

Avez-vous une idée de comment opérer ?
Merci d'avance.

Dernière modification par moi.néo (Le 04/12/2009, à 21:16)

Hors ligne

#2 Le 02/12/2009, à 10:55

sensini

Re : [Résolu] Aide script shell

Salut, il existe une commande bien sympatique pour ça : join (man join bien sur)

$>cat f1
1 56
2 45
3 23
4 50
5 12

$>cat f2
1 67
2 49
4 90
5 88

$>join -j 1 f1 f2
1 56 67
2 45 49
4 50 90
5 12 88

$>join -j 1 f1 f2 | awk '{print $1,$2}' > f1bis
$>join -j 1 f1 f2 | awk '{print $1,$3}' > f2bis

$>cat f2bis 
1 67
2 49
4 90
5 88

$>cat f1bis 
1 56
2 45
4 50
5 12

et en une seule ligne:

join -j 1 f1 f2 | awk '{print $1,$3 > "f2";print $1,$2 > "f1"}'

http://doc.ubuntu-fr.org/aptitude
http://bepo.fr
Pensez à chercher sur un moteur de recherche avant de demander http://google.fr/ ;)

Hors ligne

#3 Le 02/12/2009, à 17:36

moi.néo

Re : [Résolu] Aide script shell

Ah voilà, c'est exactement ce qu'il me fallait smile

join -j 1 f1 f2

Très utile cette commande, merci beaucoup wink

Hors ligne

#4 Le 02/12/2009, à 22:19

moi.néo

Re : [Résolu] Aide script shell

heu désolé pour le double post mais j'ai un p'tit souci.
Voici mes 2 fichiers :

23 55.007399911
24 55.012110862
25 55.032641812
26 55.036972761
27 55.057383709
28 55.092211573
29 55.061694655
30 55.104722505
3 10.000000000
5 13.000000000
8 19.000000000
12 31.000000000
23 55.000000000
24 55.007399911
25 55.012110862
26 55.032641812
27 55.036972761
28 55.036972761
29 55.057383709
30 55.061694655
31 55.092211573
32 55.104722505
33 55.109133448
34 55.121184403

J'ai rien qui s'affiche quand je fais le join hmm

Dernière modification par moi.néo (Le 02/12/2009, à 22:19)

Hors ligne

#5 Le 03/12/2009, à 20:59

moi.néo

Re : [Résolu] Aide script shell

Quelqu'un aurait une idée ?

Hors ligne

#6 Le 04/12/2009, à 12:25

sensini

Re : [Résolu] Aide script shell

salut, désolé, je ne viens pas tous les jours…

Pour ton souci, si tu regardes le man de join, il dit qu'il faut que tes fichiers soient triés. Ce qui n'est pas le cas !

$>sort f2
12 31.000000000
23 55.000000000
24 55.007399911
25 55.012110862
26 55.032641812
27 55.036972761
28 55.036972761
29 55.057383709
30 55.061694655
3 10.000000000
31 55.092211573
32 55.104722505
33 55.109133448
34 55.121184403
5 13.000000000
8 19.000000000

et là, ça marche tout de suite mieux wink
(tu pourras refaire un sort -n sur la sortie du join après wink )


http://doc.ubuntu-fr.org/aptitude
http://bepo.fr
Pensez à chercher sur un moteur de recherche avant de demander http://google.fr/ ;)

Hors ligne

#7 Le 04/12/2009, à 21:16

moi.néo

Re : [Résolu] Aide script shell

ah ok, trié par ordre lexicographique big_smile
Merci smile

Hors ligne