Zusammenführen von zwei Dateien, jeweils eine Spalte

12

Ich habe 2 große Dateien (3000 Spalten, 15000 Zeilen) im folgenden Format

datei1 (tabulatorgetrennt):

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

datei2 (tabulatorgetrennt):

3 5 2
1 7 10
3 4 3

Ich möchte die Werte aus der ersten Spalte jeder Datei mit einem Trennzeichen ":" kombinieren und dann in die zweite, dritte usw. Spalte wechseln. Gewünschte Ausgabe (tabulatorgetrennt):

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

Effizienz ist nicht entscheidend, daher ist jede Sprache in Ordnung. Ich entschuldige mich, wenn dies vorher gefragt wurde.

Jon Degner
quelle

Antworten:

14

Etwas wie das? Arbeitete mit Ihren Beispieldaten:

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
basteln
quelle
2
Ich liebe Paste. +1
Glenn Jackman
Fair genug @glennjackman; Ich werde meine Antwort ändern.
Tink
Ja! Perfekt funktioniert! Danke für die schnelle Antwort.
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
Glenn Jackman
quelle
Funktionierte perfekt, obwohl ich die Einfachheit der Antwort von tink bevorzuge.
Jon Degner
1
@ JonDegner Wenn diese Antwort (oder diese) Ihr Problem gelöst hat, nehmen Sie sich bitte einen Moment Zeit und akzeptieren Sie sie, indem Sie auf das Häkchen links klicken. Dadurch wird die Frage als beantwortet markiert und auf den Stack Exchange-Sites wird der Dank ausgesprochen.
Terdon
6

Ein etwas anderer Ansatz:

paste -d: <(xargs -n1 <file1) <(xargs -n1 <file2) | xargs -n 3
Michael Vehrs
quelle
Ich habe dem zugestimmt, aber nur gemerkt, dass der -n 3- Teil nur für das bereitgestellte Sample funktioniert. Die Spaltenanzahl muss geändert werden, um die tatsächlichen Daten aufzunehmen.
Tink
@ Tink Offensichtlich ja. Sie könnten die Spaltenanzahl jedoch mit so etwas wie berechnen head -n1 | wc -w.
Michael Vehrs
Heh. Das war nicht dafür gedacht, dass du antwortest, ich weiß genau, wie ich es umgehen sollst ... nur eine Erklärung, dass deine Antwort eine Aufwertung weniger haben sollte:}
tink