правильно соединить два файла на основе двух общих столбцов
У меня есть два файла, которые яя пытаюсь объединить / объединить на основе столбцов1
а также2
, Они выглядят примерно так, с (file1
58210
линии) намного короче, чемfile2
815530
линии) и яЯ хотел бы найти пересечение этих двух файлов на основе полей1
а также2
в качестве индекса ::: I '
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
...
Я использовал следующую пару команд, но в итоге получилось разное количество строк:
awk 'FNR==NR{a[$1$2]=$3;next} {if($1$2 in a) print}' file1 file2 | wc -l
awk 'FNR==NR{a[$1$2]=$3;next} {if($1$2 in a) print}' file2 file1 | wc -l
Я не уверен, почему это происходит, и яя пробовал сортировку перед сравнением, на случай, если у меня появятся повторяющиеся строки (на основе столбцов1
а также2
) в любом из файлов, но это некажется, чтобы помочь. (Любое понимание того, почему это так, также приветствуется)
Как я могу просто объединить файлы так, чтобы только строкиfile2
которые имеют соответствующие столбцы1
а также2
вfile1
напечатать, с колонкой3
изfile1
добавлено, чтобы выглядеть примерно так:
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