行の特定の列をペアにして定義された値の範囲内にある値列2の行を選択するawkコマンドを設計しようとしています。これは、エクソン境界から50ヌクレオチド以内にない一塩基多型の呼び出しに適用されます。ファイルは次のようになります。
ID X start end start end start end start end
Fal1825_c6 802 2 62 62 239 239 362 362 934
Fal1821_c2 152 1 19 22 159 159 263 264 398
Fal18279_c7 41 1 177 177 598
Fal18376_c3 367 1 251 251 421
Fal18748_c2 601 1 152 152 489 489 499 499 677
Fal18748_c2 500 1 152 152 489 489 499 499 677
Fal18792_c3 750 1 234 234 459 459 762 762 83
Fal19487_c2 89 1 177 177 270 270 409 411 459
2番目の列の値が( "start" + 50)と( "end"-50)の範囲にある行のみを印刷したいのですが、その行の"start"と"end"のペアリング( 「開始」列と「終了」列が隣り合っている)、つまり($ 3 +50と$4-50)または($ 5 +50と$6-50)または($ 7 +50と$8-50)の間など。コンポーネントの開始と終了の列のすべてのペアを考慮します。
出力は次のようになります。
ID X start end start end start end start end
Fal1825_c6 802 2 62 62 239 239 362 362 934
Fal18376_c3 367 1 251 251 421
Fal18748_c2 601 1 152 152 489 489 499 499 677
Fal19487_c2 89 1 177 177 270 270 409 411 459
私が試みたコマンドは次のようになりました
awk '{a=3; b=4; while ($a > 0) do {if ($2 > ($a + 50) && $2 < ($b + 50)){print $0} else {a+2, b+2} }'
ありがとうございました