A menos que a entrada seja enorme, eu salvaria os pares file2
em um hash e usaria para ignorar as linhas em file1
. Por exemplo:
awk 'FNR == NR { h[$1,$2]; next }; !($1 SUBSEP $2 in h)' file2 file1
Saída:
sc2/10 10 . G C 50 F=5;U=4
sc2/24 24 . T G 31 F=5;U=4
sc2/11 30 . A T 60 F=5;U=4
IIUC sc2/24 24
está corretamente incluído na saída.
Explicação
-
FNR == NR { h[$1,$2]; next }
salva$1/$2
pairs noh
hash (note que o acesso a um array por subscrito é suficiente para alocá-lo), mas somente a partir do primeiro arquivo de entrada (file2
). O comandonext
pula para o próximo registro. -
! ($1 SUBSEP $2 in h)
é avaliado apenas parafile1
e invocará o bloco padrão para linhas não contendo os pares$1/$2
. O bloco padrão é{ print $0 }
. (nota: evite usar!h[$1,$2]
(o mesmo que!h[$1 SUBSEP $2]
) como alocaria)
O texto acima assume o valor de SUBSEP
(geralmente o caractere ^\
) não encontrado nos dois primeiros campos do arquivo.