Compare 2 arquivos se estiver entre um intervalo de números

3

Eu tenho 2 arquivos,

Arquivo 1:

4
7
2

Arquivo 2:

1 5 Alpha
6 10 Bravo
11 15 Charlie
16 21 Delta
22 30 Echo

Eu quero comparar todas as entradas no arquivo 1 se ele estiver entre col 1 e col 2 do arquivo 2 (deve ser verificado para o arquivo inteiro 2) e se ele corresponder, ele deverá ser impresso  respectivo col 1 do arquivo 1 e coluna 3 do arquivo 2.

Eu tentei usar, paste file1 file2 | awk '$1>$2+0 && $1<$3+0 {print $1,$4}'

Mas parece que não está funcionando.

Quando estiver em execução, paste file1 file2 | awk '{print $1}'

Produz como,

4
7
2
16
22
O comando

paste combina o arquivo e não conseguiu diferenciar arquivos.

    
por Karthik 25.06.2015 / 13:26

2 respostas

4

Você pode tentar seguir awk :

awk 'NR == FNR { x[$1] = $1+0; next; } { for (i in x) { if (x[i] > $1+0 && x[i] < $2+0) { print x[i], $3; } } }' file1 file2

O resultado deve ser:

4 Alpha
2 Alpha
7 Bravo
    
por 25.06.2015 / 13:43
2

Apenas por diversão, perl:

perl -MPath::Class -lne '
    BEGIN {@codes = map {[split]} file("file2")->slurp; $, = " "}
    $val = $_;
    ($code) = grep {$_->[0] <= $val && $val <= $_->[1]} @codes;
    print $val, $code->[2];
' file1
    
por 25.06.2015 / 19:55