Unione di due file, una colonna alla volta


12

Ho 2 file di grandi dimensioni (3000 colonne, 15000 righe) del seguente formato

file1 (separato da tabulazioni):

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

file2 (separato da tabulazioni):

3 5 2
1 7 10
3 4 3

Vorrei combinare i valori della prima colonna di ogni file con un separatore ":", quindi passare alla seconda, terza, ecc. Colonne. Output desiderato (separato da tabulazione):

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

L'efficienza non è fondamentale, quindi qualsiasi lingua va bene. Mi scuso se è stato chiesto prima.

Risposte:


14

Qualcosa come questo? Ha funzionato con i tuoi dati di esempio:

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
Adoro incollare. +1
glenn jackman,

Abbastanza giusto @glennjackman; Modificherò la mia risposta.
tink

Sì! Ha funzionato perfettamente! Grazie per la risposta rapida.
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

Ha funzionato perfettamente, anche se preferisco la semplicità della risposta di Tink.
Jon Degner,

1
@JonDegner quindi se quella risposta (o questa) ha risolto il tuo problema, ti preghiamo di prendere un momento e accettarlo facendo clic sul segno di spunta a sinistra. Ciò contrassegnerà la domanda come risposta ed è il modo in cui i ringraziamenti sono espressi sui siti di Stack Exchange.
terdon

6

Un approccio leggermente diverso:

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

Ho valutato questo, ma ho appena capito che la parte -n 3 funziona solo sul campione fornito. Il conteggio delle colonne deve essere modificato per adattarsi ai dati effettivi.
tink

@tink Ovviamente sì. head -n1 | wc -wTuttavia, è possibile calcolare il conteggio delle colonne con qualcosa di simile .
Michael Vehrs,

Eh. Non è stato pensato per te per rispondere, sono ben consapevole di come aggirare ... solo una spiegazione che la tua risposta dovrebbe avere un voto in meno:}
tink
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.