如何使用awk对基因组数据按第二列连续数值分组添加组编码
基因组连续区间分组编码awk实现方案
原有代码问题
- BEGIN块执行时还未加载任何行数据,
$2无有效值,初始赋值失败 - 变量每次处理完行都被覆盖为当前行第二列值,没有保留分组首行的数值,导致同组后续行编码错误
正确实现代码
我们只需要两个临时变量:prev 存储上一行第二列的值,start 存储当前分组的首行第二列值,逻辑如下:
- 第一行直接初始化分组起始值为当前行第二列
- 每一行判断是否和上一行连续:如果不连续就重置分组起始值为当前行第二列
- 所有行输出原内容+当前分组起始值,再更新上一行值为当前行第二列
awk 'NR == 1 {start = $2} $2 != prev + 1 {start = $2} {print $0 "\t" start; prev = $2}' test
运行上述代码即可得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者lbal
相关产品推荐
相关产品推荐

