3

我正在尝试设计一个 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  

对于该行上的任何“开始”和“结束”配对(仅由“开始”和“结束”列彼此相邻),即介于 ($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} }'

谢谢

4

1 回答 1

3

尝试:

awk '{
for (i = 3; i <= NF; i += 2)
  if ($2 > $i+50 && $2 < $(i+1)-50) { print; next } 
}' FILE
于 2012-04-20T13:57:43.973 回答