-
Use
joinpara encontrar os campos 1st comuns e usebashpara comparar valores:join --nocheck-order -j 1 A B | while read a b c d ; do [[ ( b -le d && b -ge c ) || ( b -le c && b -ge d ) ]] && echo $a $b doneA especificação OP declara " o número na segunda coluna no arquivo A é dentro do intervalo dos números na segunda e terceira colunas em arquivo B ". Esse intervalo pode não ser ordenado, então a lógica entre
[[e]]lida com isso de qualquer maneira. Exemplo:- Se A2 = 3 , B2 = 2 e B3 = 4 , correspondido por
( b -le d && b -ge c ). - Se A2 = 3 , B2 = 4 e B3 = 2 , correspondido por
( b -le c && b -ge d ).
- Se A2 = 3 , B2 = 2 e B3 = 4 , correspondido por
-
Não tão bom GNU
sedcode para transformar cada linha do arquivo B em dois canalizadosnumgrepcomanda esse arquivo de busca A para intervalos, entãoevaloriza os comandos. Como a lista de comandos resultante pode ter saída redundante, canalize isso paraawkpara executar um uniq não selecionado :sed -n \ 's#\(\w*\)\W*\(\w*\)\W*\(\w*\)#numgrep // A\|numgrep /..,../#e /./p' B | awk '!a[$0]++'
Saída de um dos métodos:
7000000185249048 235500