Para o valor dentro de um intervalo, obtenha o valor correspondente

0

Estou pensando em usar o awk para pesquisar um valor do arquivo de entrada em um arquivo de referência e obter um valor correspondente do arquivo de referência.

Os arquivos de referência e de entrada podem ser classificados com base em $ 3 e $ 2 correspondentemente (acho que será mais fácil se eles forem classificados). Arquivo de referência:

ID3  A    16553824    16561652    -1
ID4  A    22629640    22630440    -1
ID1  A    26607738    26607962    -1
ID2  A    28571020    28571736    -1

Arquivo de entrada:

A 16553900 16554000 -1
A 26607800 26607900 -1
A 28571050 28571100 -1

Eu quero comparar a entrada $ 2 para referenciar $ 3 e $ 4. Se referência $ 3 < entrada $ 2 < referência $ 3, linha correspondente será atribuído referência $ 1 na entrada $ 5. Então será parecido com:

Saída desejada:

A 16553900 16554000 -1 ID1
A 26607800 26607900 -1 ID3
A 28571050 28571100 -1 ID4
    
por Karli 12.01.2015 / 03:27

1 resposta

1

Parece que sua saída desejada está errada.

awk '
    NR == FNR {min[$1]=$3; max[$1]=$4; next}
    {
        for (id in min) 
            if (min[id] < $2 && $2 < max[id]) {
                print $0, id
                break
            }
    }
' reference input
A 16553900 16554000 -1 ID3
A 26607800 26607900 -1 ID1
A 28571050 28571100 -1 ID2
    
por 12.01.2015 / 04:36