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.

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

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.