J'ai file1 aime:
0 AFFX-SNP-000541 NA
0 AFFX-SNP-002255 NA
1 rs12103 0.6401
1 rs12103_1247494 0.696
1 rs12142199 0.7672
Et un fichier2:
0 AFFX-SNP-000541 1
0 AFFX-SNP-002255 1
1 rs12103 0.5596
1 rs12103_1247494 0.5581
1 rs12142199 0.4931
Et voudrait un fichier3 tel que:
0 AFFX-SNP-000541 NA 1
0 AFFX-SNP-002255 NA 1
1 rs12103 0.6401 0.5596
1 rs12103_1247494 0.696 0.5581
1 rs12142199 0.7672 0.4931
Ce qui signifie mettre la 4ème colonne de fichier2 en fichier1 par le nom de la 2ème colonne.
text-processing
awk
join
bioinformatics
Dadong Zhang
la source
la source
Réponses:
Cela devrait le faire:
Important : cela suppose que vos fichiers sont triés (comme dans votre exemple) selon le nom SNP. Si ce n'est pas le cas, triez-les d'abord:
Sortie:
Explication (de
info join
):Ainsi, la commande ci-dessus joint les fichiers du deuxième champ et imprime les 1er, 2e et 3e champs du fichier un, suivis du 3e champ du fichier2.
la source
Vous pouvez utiliser
awk
:sortie:
Explication:
Parcourez
file2
(NR==FNR
n'est vrai que pour le premier argument de fichier). Enregistrer la colonne 3 dans le hachage tableau en utilisant la colonne 2 comme la clé:h[$2] = $3
. Parcourez ensuitefile1
et affichez les trois colonnes$1,$2,$3
, en ajoutant la colonne enregistrée correspondante à partir du tableau de hachageh[$2]
.la source
h[$2] = $3
est une affectation de hachage. Il enregistre$3
comme valeur et$2
comme clé. Exemple:h["name"] = "Dadong"
. Maintenant, lesprint h["name"]
sortiesDadong
. Il fait ce que vous voulez, il correspond exactement à la deuxième colonne des deux fichiers.Si vous n'avez besoin d'aucune commande, une solution simple serait
Cela suppose que toutes les lignes ont trois entrées et que les colonnes 1 et 2 des deux fichiers sont identiques (comme dans vos données d'exemple)
la source
paste
paste
pouvez-vous trouver un moyen de répondre à cela avec coreutils?