У меня есть два файла, которые я пытаюсь объединить/объединить на основе столбцов 1 и 2. Они выглядят примерно так: файл1 (58210 строк) намного короче, чем file2 (815530 строк), и я бы хотел найти пересечение этих двух файлов на основе полей 1 и 2 в качестве индекса:
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) в любом из файлов, но это не кажется Помогите. (Любое понимание того, почему это так, также ценится)
Как я могу просто объединить файлы так, чтобы только строки файла2, имеющие соответствующие столбцы 1 и 2 в файле1, печатались с добавлением столбца 3 файла1, чтобы выглядеть примерно так:
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