gpt4 book ai didi

awk 命令从由成对的列定义的间隔中选择值

转载 作者:行者123 更新时间:2023-12-02 00:22:30 27 4
gpt4 key购买 nike

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

谢谢

最佳答案

尝试:

awk '{
for (i = 3; i <= NF; i += 2)
if ($2 > $i+50 && $2 < $(i+1)-50) { print; next }
}' FILE

关于awk 命令从由成对的列定义的间隔中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com