Mesclando dois arquivos, uma coluna por vez


12

Eu tenho 2 arquivos grandes (3000 colunas, 15000 linhas) do seguinte formato

arquivo1 (separado por tabulação):

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

arquivo2 (separado por tabulação):

3 5 2
1 7 10
3 4 3

Gostaria de combinar os valores da primeira coluna de cada arquivo com um separador ":" e depois passar para a segunda, terceira, etc. colunas. Saída desejada (separada por tabulação):

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

A eficiência não é crítica; portanto, qualquer idioma é adequado. Peço desculpas se isso já foi solicitado antes.

Respostas:


14

Algo assim? Trabalhou com seus dados de amostra:

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
Eu amo colar 1
glenn jackman

É justo o suficiente @glennjackman; Vou alterar minha resposta.
18716

Sim! Funcionou perfeitamente! Obrigado pela resposta rápida.
Jon Degner

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

Funcionou perfeitamente, embora eu prefira a simplicidade da resposta do tink.
Jon Degner

1
@ JonDegner, se essa resposta (ou essa) resolver seu problema, reserve um momento e aceite-o clicando na marca de seleção à esquerda. Isso marcará a pergunta como respondida e é assim que os agradecimentos são expressos nos sites do Stack Exchange.
terdon

6

Uma abordagem ligeiramente diferente:

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

Votou com isso, mas acabei de perceber que a parte -n 3 funciona apenas na amostra fornecida. A contagem de colunas precisa ser modificada para acomodar os dados reais.
18716

@tink Obviamente, sim. Você pode calcular a contagem de colunas com algo como head -n1 | wc -w, no entanto.
Michael Vehrs 07/07

Heh. Isso não foi feito para você responder, estou bem ciente de como contornar isso ... apenas uma explicação de que sua resposta deve ter menos um voto positivo:}
tink 07/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.