IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Match de colonnes non trié entre fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Par défaut Match de colonnes non trié entre fichier
    Bonjour a tous, m'intéressant depuis peu a de la bio-informatique, je me retrouve a utilisé la Shell pour manipuler des gros fichiers de data base.


    Mon problème aujourd'hui est le suivant :


    J'ai deux fichiers :
    RNAseq.txt contenant 14 colones et quelque 54 000 lignes.


    GSM521268 GSM521269 GSM521270 GSM521271 GSM521272 GSM521273 GSM521274 GSM521275 GSM521276 GSM521277 GSM521278 GSM521279 GSM521280 GSM521281
    MIR4640_1 322.2 322.3 302.9 310.0 277.1 285.1 275.0 266.6 246.2 270.2 215.3 231.6 341.9 356.4
    RFC2_1 447.9 456.2 378.1 366.9 376.8 396.9 406.2 392.6 371.9 388.7 363.0 351.9 441.8 455.1
    HSPA6_1 51.1 52.9 54.1 53.3 52.9 49.4 41.3 48.4 47.2 49.3 48.9 52.7 53.3 50.5
    PAX8_1 298.0 319.7 285.3 292.0 267.0 283.4 247.7 265.4 280.9 289.3 282.5 284.9 268.4 267.5
    GUCA1A_1 7.7 7.4 7.3 7.1 6.3 6.9 7.1 7.3 7.7 7.0 7.7 7.2 7.2 7.4
    MIR5193_1 131.1 129.5 106.9 96.4 101.5 103.7 144.3 138.3 131.1 122.5 150.6 158.5 117.9 116.0
    THRA_1 29.5 29.4 30.0 26.3 28.0 26.9 26.1 29.1 28.5 27.3 27.3 29.2 26.2 28.5
    PTPN21_1 67.6 63.0 61.9 63.2 62.9 64.0 58.5 58.4 63.5 61.8 57.7 59.3 62.5 63.0
    CCL5_1 11.9 11.4 8.8 10.1 10.9 9.7 9.5 8.9 8.8 9.5 11.5 10.3 10.0 10.8


    et LRPPRC_2000.txt

    genes logFC logCPM PValue FDR
    MYOCD_2 2.97386810448106 2.02944105936454 5.25454090442755e-46 1.78442250900358e-43
    NEFL_2 2.80402073168777 3.35229371955615 2.16925036628554e-114 4.08978495781593e-111
    RSAD2_2 2.249052324673 2.70645211477593 3.36998068756065e-44 1.06505025486924e-41
    TM4SF1_2 2.1300365595002 4.20013592227357 1.54921028988239e-92 1.80219303402808e-89
    IFI44L_1 2.07454066243818 3.69083076729137 7.56205099901107e-31 1.36905674957262e-28
    PTBP2_1 2.02278075266193 2.31117065783669 4.15622833856391e-28 6.36531608994347e-26
    NEFL_3 1.99692019590042 2.81263326571224 5.76561461673869e-41 1.60017755923953e-38
    TM4SF1_4 1.99420423509474 3.7984910916427 8.53711875625522e-84 8.48667214542281e-81


    Contenant 5 colones et 2000 lignes. En soi, dans ce fichier seul la colonne 1 m'intéresse.


    Ce que je veux faire : prendre la colonne 1 "genes" de mon fichier LRPPRC_2000.txt et les matchs avec la colonne 1 du fichier RNAseq (dans lequel ils sont tous présents) afin de sortir dans un 3nd fichier, toutes les valeurs du tableau 1 associé a ces gênes uniquement, et me débarrasser de toutes les autres valeurs.


    Au fils de mes recherches, j'ai compris qu'il fallait que j'utilise la awk, mais toutes mes tentatives d'adaptations de formules trouvées sur internet se sont révélées infructueuses !


    Faites-moi savoir si mes explications ne sont pas claires !


    En vous remerciant par avance.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Bonjour,

    attention, awk est un langage à part entière, au même titre que perl, python...

    pour ton problème, considère l'emploi de join.

    par contre, il faudra trier les fichiers, au moins "temporairement".
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    attention, awk est un langage à part entière, au même titre que perl, python...

    pour ton problème, considère l'emploi de join.

    par contre, il faudra trier les fichiers, au moins "temporairement".
    Le problème c'est que mes 2000 genes provienne de ma liste de 54 000 gènes, a différents endroit, donc même avec un tri, les colones ne vont pas correspondre


    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    2 idées en vrac :

    Filtre simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1d;s/ .*//;s/^/\\</;s/$/\\>/' LRPPRC_2000.txt | grep -f - RNAseq.txt
    Ton exemple n'est pas bon car il n'y a aucune correspondance dans les deux fichiers . On ne peut pas juger du fonctionnement ou dysfonctionnement.

    Deuxième possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' 'FNR==NR{a[$1]=$0;next;} (a[$1]!=""){print a[$1];}' LRPPRC_2000.txt RNAseq.txt
    Attention. Ton séparateur est la tabulation mais des espaces se baladent dans ton premier champ ...

    Ce n'est sûrement pas la solution mais tu as déjà pas mal à étudier pour comprendre ces 2 pistes si proches de ta solution
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Ceci devrait le faire : grep -f <(grep -o '^[^ ]*' LRPPRC_2000.txt) RNAseq.txt non ?

    Je test ces idées aujourd'hui ! Je reviens quand j'ai des résultats

    Citation Envoyé par disedorgue Voir le message
    Perso, pour moi, faire ça en shell, c'est du bricolage, surtout pour de la bio informatique...

    Par exemple, tu as python + pandas qui permet de traiter ce genre de problème, et voir bien au-delà.
    Malheureusement je n'ai pas de formation en Bioinformatique ! j'apprend sur le tas, à date toute les suites de programme que je doit utiliser sont sous la shell, puis sur R alors j'utilise ça !



    Merci a tous !

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Le problème c'est que mes 2000 genes provienne de ma liste de 54 000 gènes, a différents endroit, donc même avec un tri, les colones ne vont pas correspondre
    `comprends pas.
    il faut trier uniquement la colonne (dans chaque fichier, bien sûr) sur laquelle on fait le join.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    `comprends pas.
    il faut trier uniquement la colonne (dans chaque fichier, bien sûr) sur laquelle on fait le join.
    c'est peut être moi qui ai mal compris l'utilisation de Join !

    Pour moi pour utiliser join il faut que les deux colones soit identique pour qu'elles puisse matché entre elle une fois triée comme ça

    Col1 Table 1 | Col2 Table 2

    A | A
    B | B
    C | C
    D | D


    Vu que tout mes genes ne sont pas présent dans mon fichier LRPPRC2000, quand je vais trié les deux je vais avoir possiblement certain qui vont matché mais beaucoup d'autre non (ici par exemple, j'ai plus mon gene B dans mon fichier, du coup, quand je sort, l'ordre des deux fichier va être différent.


    A | A
    C | B
    D | C


    Je sais pas si je me suis fait mieux comprendre !

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 374
    Par défaut
    Citation Envoyé par Ilyndril Voir le message
    Malheureusement je n'ai pas de formation en Bioinformatique ! j'apprend sur le tas, à date toute les suites de programme que je doit utiliser sont sous la shell, puis sur R alors j'utilise ça !
    Bah, ça tombe bien, R sait traiter des data frames (package dplyr) , donc essaye directement sous R, c'est un bon entrainement...

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    un petit test/démonstration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ join -j 1 <(printf '%s\n' 'C c c' 'A a a' 'B b b' | sort -k1,1) <(printf '%s\n' 'A a2 a2' 'C c2 c2' 'D d2 d2' | sort -k1,1)
    A a a a2 a2
    C c c c2 c2
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Par défaut
    Salut a tous !

    Bon effectivement essayer de faire ça en Shell c'est comme creuser des tranchée a la petite cuillère, ça marche mais c'est pas fait pour ça !

    J'ai réussi a le faire avec la fonction Merge sur R


    Merci pour vos idée tout de même !

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 294
    Par défaut
    Bonjour

    2 idées en vrac :

    Filtre simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1d;s/ .*//;s/^/\\</;s/$/\\>/' LRPPRC_2000.txt | grep -f - RNAseq.txt
    Ton exemple n'est pas bon car il n'y a aucune correspondance dans les deux fichiers . On ne peut pas juger du fonctionnement ou dysfonctionnement.

    Deuxième possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' 'FNR==NR{a[$1]=$0;next;} (a[$1]!=""){print a[$1];}' LRPPRC_2000.txt RNAseq.txt
    Attention. Ton séparateur est la tabulation mais des espaces se baladent dans ton premier champ ...

    Ce n'est sûrement pas la solution mais tu as déjà pas mal à étudier pour comprendre ces 2 pistes si proches de ta solution

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Ceci devrait le faire : grep -f <(grep -o '^[^ ]*' LRPPRC_2000.txt) RNAseq.txt non ?


  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 374
    Par défaut
    Perso, pour moi, faire ça en shell, c'est du bricolage, surtout pour de la bio informatique...

    Par exemple, tu as python + pandas qui permet de traiter ce genre de problème, et voir bien au-delà.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. vba tri entre deux dates et valeur oui/non
    Par david29170 dans le forum IHM
    Réponses: 4
    Dernier message: 08/06/2011, 10h52
  2. [1.x] Chemin entre fichier non reconnu
    Par Playerz dans le forum Symfony
    Réponses: 3
    Dernier message: 13/11/2010, 14h52
  3. Tri des colonnes non liées d'un datagridview
    Par Bluberiman dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/05/2010, 18h27
  4. [WD12] Table fichier avec colonne non liée
    Par david77320 dans le forum WinDev
    Réponses: 1
    Dernier message: 17/10/2008, 11h09
  5. Obtenir la lettre de la derniere colonne non vide pour faire un tri.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/10/2007, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo