[HS] joindre plusieurs fichier de donnees en un seul

Le
Patrick CAO HUU THIEN
bonjour ,
Ma question des quelque peu HS mais je sais que la liste est
suffisamment ouverte alors je me lance:

j'ai plusieurs fichier de donnees du type
--f1-
5 100 16.2
5 1000 25.64
.


avec toujours la meme structure :
les 2 premiers colonnes représentent des coordonnées et la dernière=

une valeur

avec ces fichiers je voudrais avoir un fichier résultat du genre
(exemple avec 3 fichiers)
--resu--
5 100 16.2 47.6 25.6
5 1000 25.64 65.69 65.3
--

Je doit pouvoir faire cela avec bash/sed/awk/perl mais la je
m'arrache les cheveux

merci d'avance

--
Patrick CAO HUU THIEN Institut Jean-Le-Rond d'Alembert
Équipe informatique Université Pierre et Marie CURIE
case 161
tel: 01 44 27 87 01 4, place Jussieu
fax: 01 44 27 51 44 (ou 88 78) 75252 Paris Cedex 05
email: patrick.cao_huu_thien@upmc.fr
gpg key ID: 1024D/58D16D27 sur pgp.mit.edu
fingerprint: D7B8 7DFB 479C A02E 48A2 383C 0005 4A33 58D1 6D27


--
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
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
Sylvain Sauvage
Le #17917101
Patrick CAO HUU THIEN, vendredi 21 novembre 2008, 16:44:13 CET

bonjour ,



’jour,

[…]
avec ces fichiers je voudrais avoir un fichier résultat du
genre (exemple avec 3 fichiers)
--resu--------------------
5 100 16.2 47.6 25.6
5 1000 25.64 65.69 65.3
--------------------------

Je doit pouvoir faire cela avec bash/sed/awk/perl mais la je
m'arrache les cheveux



man paste, puis awk pour virer les colonnes superflues.

--
Sylvain Sauvage

--
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 #17917531
Patrick CAO HUU THIEN a écrit, vendredi 21 novembre 2008, à 16:44 :
bonjour ,
Ma question des quelque peu HS mais je sais que la liste est
suffisamment ouverte alors je me lance:



et c'est vendredi.

j'ai plusieurs fichier de donnees du type
5 100 16.2
5 1000 25.64
....

avec toujours la meme structure :
les 2 premiers colonnes représentent des coordonnées et la dernière une
valeur

avec ces fichiers je voudrais avoir un fichier résultat du genre
(exemple avec 3 fichiers)
5 100 16.2 47.6 25.6
5 1000 25.64 65.69 65.3

Je doit pouvoir faire cela avec bash/sed/awk/perl mais la je m'arrache
les cheveux



~ $ cat source
5 100 16.2
5 1000 25.64
4 80 18
5 200 42
5 100 3.14
5 1000 2.718
5 100 1.414
5 1000 6.666
4 80 33
~ $ awk '
NF==3{v[$1" "$2]=v[$1" "$2]" "$3}
END{for(p in v){print p"t"v[p]}}
' <source
5 1000 25.64 2.718 6.666
4 80 18 33
5 100 16.2 3.14 1.414
5 200 42

merci d'avance



de rien,
--
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
Patrick CAO HUU THIEN
Le #17955461
Jacques L'helgoualc'h a dit le 11/21/2008 05:11 PM:
merci jacques mais ce n'est pas tout a fait ca que je recherche.
J'ai du mal m'expliquer.

J'ai plusieurs fichiers avec tous
- f1 ---------
5 100 25.3
5 1000 63.2
------------

- f2 -------
5 100 58.36
5 1000 47.362
-----------

et je voudrais ceci:

-- resu ------
5 100 25.3 58.36
5 1000 63.2 47.362
-----------

je pense que la piste de sylvain «paste» me semble plus prometteuse.

--
patrick

--
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
Patrick CAO HUU THIEN
Le #17955991
Sylvain Sauvage a dit le 11/21/2008 04:56 PM:
Patrick CAO HUU THIEN, vendredi 21 novembre 2008, 16:44:13 CET
bonjour ,



’jour,

[…]
avec ces fichiers je voudrais avoir un fichier résultat du
genre (exemple avec 3 fichiers)
--resu--------------------
5 100 16.2 47.6 25.6
5 1000 25.64 65.69 65.3
--------------------------

Je doit pouvoir faire cela avec bash/sed/awk/perl mais la je
m'arrache les cheveux



man paste, puis awk pour virer les colonnes superflues.




merci je ne connaissais pas !!

voici le résultat pour un nombre arbitraire de fichiers ^^
---------------------------------
#!/bin/bash
i=3
while f="$1";shift; do
FILES="$f $FILES"
AWKPARAMS="$AWKPARAMS,$$i"
(( i += 3 ))
done

# add two first columns
AWKPARAMS="$1,$2$AWKPARAMS"

eval paste $FILES | awk "/^#/{next};/^$/{next};{print $AWKPARAMS}"
----------------------------------

si ca peux servir

--
Patrick CAO HUU THIEN

--
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 #17956261
Patrick CAO HUU THIEN a écrit, mardi 25 novembre 2008, à 13:26 :
Jacques L'helgoualc'h a dit le 11/21/2008 05:11 PM:
merci jacques mais ce n'est pas tout a fait ca que je recherche. J'ai du
mal m'expliquer.

J'ai plusieurs fichiers avec tous
- f1 ---------
5 100 25.3
5 1000 63.2

- f2 -------
5 100 58.36
5 1000 47.362

et je voudrais ceci:

5 100 25.3 58.36
5 1000 63.2 47.362

je pense que la piste de sylvain «paste» me semble plus prometteuse.



Avec paste, si tu es sûr de l'ordre, tu ne fais que mettre côte à côte
les différents fichiers, et il faut une autre étape avec awk ou cut pour
éliminer les colonnes redondantes modulo 3.

Tu peux aussi filtrer avant, quand le nombre de fichiers est connu :

~ $ paste -d' ' f1 <(cut -d' ' -f3 f2)
5 100 25.3 58.36
5 1000 63.2 47.362


Le hachage Awk --- transposable en Perl ou autre --- que je te propose
est assez simple, plus souple quant au format et au nombre de données à
regrouper, et moins exigeant sur l'ordre des lignes (mais ne le respecte
pas en l'état (si tu y tiens, c'est facile en comptant les lignes (non,
je ne propose pas une solution (e)lisp :))).

awk '[script]' f1 f3 ... fn > r1

où certains fk peuvent déjà être des récapitulations partielles.
--
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
Jacques L'helgoualc'h
Le #17960061
Patrick CAO HUU THIEN a écrit, mardi 25 novembre 2008, à 14:09 :
Sylvain Sauvage a dit le 11/21/2008 04:56 PM:


[...]
man paste, puis awk pour virer les colonnes superflues.



merci je ne connaissais pas !!

voici le résultat pour un nombre arbitraire de fichiers ^^
#!/bin/bash
i=3
while f="$1";shift; do
FILES="$f $FILES"
AWKPARAMS="$AWKPARAMS,$$i"
(( i += 3 ))
done

# add two first columns
AWKPARAMS="$1,$2$AWKPARAMS"

eval paste $FILES | awk "/^#/{next};/^$/{next};{print $AWKPARAMS}"

si ca peux servir



Avec (GNU) Sed :

~ $ paste f1 f2 f3 | sed -re '/^[[:space:]]*(#|$)/d
s/[ t]+/n/3
s//n/
s/([^ tn]+[ t]+){2}([^ tn]+[ t]*)/2n/g
s/[ tn]+/t/g
'
5 100 25.3 58.36 8.47
5 1000 63.2 47.362 37.2

--
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