参照ファイルの入力ファイルから値を取得し、参照ファイルからその値を取得するには、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