junte corretamente dois arquivos baseados em 2 colunas em comum
Eu tenho dois arquivos que eu estou tentando juntar / mesclar com base em colunas1
e2
. Eles se parecem com isso, comfile1
(58210
linhas) sendo muito mais curto do quefile2
(815530
linhas) e gostaria de encontrar a interseção desses dois arquivos com base em campos1
e2
como um índice:
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
...
Eu tenho usado o seguinte par de comandos, mas acabo com diferentes números de linhas:
awk 'FNR==NR{a[ e2]=$3;next} {if( e2 in a) print}' file1 file2 | wc -l
awk 'FNR==NR{a[ e2]=$3;next} {if( e2 in a) print}' file2 file1 | wc -l
Não sei por que isso acontece, e tentei classificar antes da comparação, para o caso de eu ter linhas duplicadas (com base em colunas1
e2
) em qualquer um dos arquivos, mas não parece ajudar. (Qualquer insights sobre por que isso é assim também são apreciados)
Como posso simplesmente mesclar os arquivos para que apenas as linhas defile2
que tem as colunas correspondentes1
e2
emfile1
seja impresso, com coluna3
dofile1
adicionado, para parecer algo assim:
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