A função join
do GNU coreutils
faz quase o que você quer - não consigo encontrar uma forma de lidar com as omissões de ambos os arquivos de uma só vez, mas
sort -u \
<(join --header --nocheck-order -t$'\t' -a1 -o 1.1,1.2,2.2 -11 -21 -e'-' file1 file2) \
<(join --header --nocheck-order -t$'\t' -a2 -o 2.1,1.2,2.2 -11 -21 -e'-' file1 file2)
100001 C C
228201 T -
312002 - C
341791 T T
380441 C C
392640 T -
412640 - A
459055 A A
459079 T T
464056 - T
480253 T -
492633 A A
570405 T T
Position Poly Poly
A linha de cabeçalho é classificada na parte inferior - se isso for um problema, você pode retirá-la passando por sed '$d'
ou head -n -1
. Como alternativa, se a saída não classificada for aceitável, você poderá remover duplicatas com awk
em vez de sort -u
, ou seja,
awk '!a[$1]++' \
<(join --header --nocheck-order -t$'\t' -a1 -o 1.1,1.2,2.2 -11 -21 -e'-' file1 file2) \
<(join --header --nocheck-order -t$'\t' -a2 -o 2.1,1.2,2.2 -11 -21 -e'-' file1 file2)
Position Poly Poly
100001 C C
228201 T -
341791 T T
380441 C C
392640 T -
459055 A A
459079 T T
480253 T -
570405 T T
492633 A A
312002 - C
412640 - A
464056 - T