Se perl
solução estiver bem. Presume que os dados column1 e column2 no arquivo1 sejam ordenados de modo que o valor na coluna1 seja sempre menor que column2
$ perl -lane '
if(!$nf)
{
if($#F > 0)
{
foreach $i (0..$#F)
{
$h{"-$F[$i]-$F[$_]-"}++ foreach ($i+1..$#F)
}
}
$nf++ if eof;
}
else
{
print if $h{"-$F[0]-$F[1]-"}
}
' file2 file1
5 6 0.995
5 7 0.658
6 7 0.431
- Primeiro, um hash de chaves é construído no arquivo2 em pares (assumindo que os números estão organizados em ordem crescente)
- os valores das duas colunas são cercados por
-
para evitar possíveis incompatibilidades, como11
e20
vs1
e120
- os valores das duas colunas são cercados por
- Em seguida, para as linhas file1, imprima a linha se a chave existir
Se file2
for alterado como
$ cat file2
1
3 4
5 6 7 8
$ perl -lane '
if(!$nf)
{
if($#F > 0)
{
foreach $i (0..$#F)
{
$h{"-$F[$i]-$F[$_]-"}++ foreach ($i+1..$#F)
}
}
$nf++ if eof;
}
else
{
print if $h{"-$F[0]-$F[1]-"}
}
' file2 file1
3 4 0.995
5 6 0.995
5 7 0.658
5 8 0.000
6 7 0.431
6 8 0.000
7 8 0.000