Tengo file1 me gusta:
0 AFFX-SNP-000541 NA
0 AFFX-SNP-002255 NA
1 rs12103 0.6401
1 rs12103_1247494 0.696
1 rs12142199 0.7672
Y un archivo2:
0 AFFX-SNP-000541 1
0 AFFX-SNP-002255 1
1 rs12103 0.5596
1 rs12103_1247494 0.5581
1 rs12142199 0.4931
Y quisiera un archivo3 tal 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
Lo que significa poner la cuarta columna del archivo2 en el archivo1 por el nombre de la segunda columna.
text-processing
awk
join
bioinformatics
Dadong Zhang
fuente
fuente

Respuestas:
Esto debería hacerlo:
Importante : esto supone que sus archivos están ordenados (como en su ejemplo) de acuerdo con el nombre de SNP. Si no lo están, ordénelos primero:
Salida:
Explicación (de
info join):Entonces, el comando anterior une los archivos en el segundo campo e imprime el primer, segundo y tercer campo del archivo uno, seguido del tercer campo del archivo2.
fuente
Podrías usar
awk:salida:
Explicación:
Recorrer
file2(NR==FNRsolo es cierto para el primer argumento de archivo). Guardar en la columna 3 de hash-array usando la columna 2 como la clave:h[$2] = $3. Luego recorrafile1y genere las tres columnas$1,$2,$3, agregando la columna guardada correspondiente de la matriz hashh[$2].fuente
h[$2] = $3es una tarea hash. Se guarda$3como el valor y$2como la clave. Ejemplo:h["name"] = "Dadong". Ahora,print h["name"]salidasDadong. Hace lo que quiere, coincide exactamente con la segunda columna de ambos archivos.Si no necesita ningún pedido, una solución simple sería
Esto supone que todas las filas tienen tres entradas, y las columnas 1 y 2 de ambos archivos son iguales (como en los datos de ejemplo)
fuente
pastepaste¿puedes encontrar una manera de responder esto con coreutils?