我正在尝试设计一个awk命令来选择值为第2列的行,该值在通过将一行的特定列配对而定义的值范围内。它可用于调用不在外显子边界的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
我想只打印第二列的值落在范围(“开始”+50)和(“结束” - 50)中的行,用于该行上的任何“开始”和“结束”配对(配对)仅由“开始”和“结束”列彼此相邻制成,即($ 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} }'
谢谢
答案 0 :(得分:3)
尝试:
awk '{
for (i = 3; i <= NF; i += 2)
if ($2 > $i+50 && $2 < $(i+1)-50) { print; next }
}' FILE