Fusionando dos archivos, una columna a la vez


12

Tengo 2 archivos grandes (3000 columnas, 15000 filas) del siguiente formato

archivo1 (separado por tabuladores):

1/0 0/0 0/0
0/0 1/1 0/0
1/1 0/1 0/0

file2 (separado por tabuladores):

3 5 2
1 7 10
3 4 3

Me gustaría combinar los valores de la primera columna de cada archivo con un separador ":", luego pasar a la segunda, tercera, etc. columnas. Salida deseada (separada por tabulaciones):

1/0:3 0/0:5 0/0:2
0/0:1 1/1:7 0/0:10
1/1:3 0/1:4 0/0:3

La eficiencia no es crítica, por lo que cualquier idioma está bien. Pido disculpas si esto se ha preguntado antes.

Respuestas:


14

¿Algo como esto? Trabajó con sus datos de muestra:

paste  file{1,2} | awk '{for (i=1;i<=NF/2; i++){printf "%s:%s\t",$i,$(NF/2+i)};printf "\n"}'
1/0:3   0/0:5   0/0:2
0/0:1   1/1:7   0/0:10
1/1:3   0/1:4   0/0:3

2
Me encanta pegar +1
glenn jackman

Bastante justo @glennjackman; Enmendaré mi respuesta.
tink

¡Si! Funcionó perfectamente! Gracias por la rápida respuesta.
Jon Degner el

9
awk '{
    getline f2 < "file2"
    split(f2, a)
    for (i=1; i<=NF; i++) 
        printf "%s:%s\t", $i, a[i]
    print ""
}' file1

Funcionó perfectamente, aunque prefiero la simplicidad de la respuesta de tink.
Jon Degner

1
@JonDegner entonces, si esa respuesta (o éste) resuelven su problema, por favor tome un momento y lo acepta haciendo clic en la marca de verificación a la izquierda. Eso marcará la pregunta como respondida y es la forma en que se agradece en los sitios de Stack Exchange.
terdon

6

Un enfoque ligeramente diferente:

paste -d: <(xargs -n1 <file1) <(xargs -n1 <file2) | xargs -n 3

Voté esto, pero me di cuenta de que la parte -n 3 solo funciona en la muestra provista. El recuento de columnas debe modificarse para acomodar los datos reales.
tink

@tink Obviamente, sí. head -n1 | wc -wSin embargo, podría calcular el recuento de columnas con algo parecido .
Michael Vehrs

Je Eso no fue para que respondieras, soy muy consciente de cómo
solucionarlo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.