特定の範囲に属する値の値を取得します。

特定の範囲に属する値の値を取得します。

参照ファイルの入力ファイルから値を取得し、参照ファイルからその値を取得するには、awkを使用します。

参照ファイルと入力ファイルの両方を$ 3と$ 2に基づいて並べ替えることができます(ソートすると簡単になります)。リファレンスドキュメント:

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

入力ファイル:

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

入力$ 2を参照$ 3と$ 4と比較したいです。参照$ 3 <入力$ 2 <参照$ 3の場合、その行は入力$ 5の参照$ 1に割り当てられます。だからそれは次のようになります:

希望の出力:

A 16553900 16554000 -1 ID1
A 26607800 26607900 -1 ID3
A 28571050 28571100 -1 ID4

答え1

希望の出力が間違っているようです。

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

関連情報