Verbinden Sie zwei Dateien, die auf zwei gemeinsamen Spalten basieren, ordnungsgemäß
Ich habe zwei Dateien, die ich basierend auf Spalten verbinden / zusammenführen möchte1
und2
. Sie sehen ungefähr so aus, mitfile1
(58210
Linien) ist viel kürzer alsfile2
(815530
Linien) und ich möchte den Schnittpunkt dieser beiden Dateien anhand von Feldern finden1
und2
als index:
file1
:
2L 25753 33158
2L 28813 33158
2L 31003 33158
2L 31077 33161
2L 31279 33161
3L 32124 45339
3L 33256 45339
...
file2
:
2L 20242 0.5 0.307692307692308
2L 22141 0.32258064516129 0.692307692307692
2L 24439 0.413793103448276 0.625
2L 24710 0.371428571428571 0.631578947368421
2L 25753 0.967741935483871 0.869565217391304
2L 28813 0.181818181818182 0.692307692307692
2L 31003 0.36 0.666666666666667
2L 31077 0.611111111111111 0.931034482758621
2L 31279 0.75 1
3L 32124 0.558823529411765 0.857142857142857
3L 33256 0.769230769230769 0.90625
...
Ich habe die folgenden Befehle verwendet, aber am Ende eine unterschiedliche Anzahl von Zeilen erhalten:
awk 'FNR==NR{a[ und2]=$3;next} {if( und2 in a) print}' file1 file2 | wc -l
awk 'FNR==NR{a[ und2]=$3;next} {if( und2 in a) print}' file2 file1 | wc -l
Ich bin mir nicht sicher, warum dies passiert, und habe vor dem Vergleich versucht, zu sortieren, nur für den Fall, dass ich doppelte Zeilen habe (basierend auf Spalten)1
und2
) in beiden Dateien, aber es scheint nicht zu helfen. (Einsichten darüber, warum dies so ist, sind ebenfalls erwünscht.)
Wie kann ich nur die Dateien zusammenführen, damit nur die Zeilen vonfile2
das haben die entsprechenden Spalten1
und2
imfile1
Gedruckt werden, mit Spalte3
vonfile1
hinzugefügt, um ungefähr so auszusehen:
2L 25753 0.967741935483871 0.869565217391304 33158
2L 28813 0.181818181818182 0.692307692307692 33158
2L 31003 0.36 0.666666666666667 33158
2L 31077 0.611111111111111 0.931034482758621 33161
2L 31279 0.75 1 33161
3L 32124 0.558823529411765 0.857142857142857 45339
3L 33256 0.769230769230769 0.90625 45339