awk处理案例二十三--增添起点

【场景】

A文件如下所示:
ENSMUSG00000000001 190
ENSMUSG00000000001 153
ENSMUSG00000000002 129
ENSMUSG00000000003 128
ENSMUSG00000000003 157
ENSMUSG00000000003 141
ENSMUSG00000000004 42
ENSMUSG00000000004 117
ENSMUSG00000000004 87
ENSMUSG00000000004 2323

想要转化成的文件如下所示:
ENSMUSG00000000001 0 190
ENSMUSG00000000001 191 343
ENSMUSG00000000002 0 129
ENSMUSG00000000003 0 128
ENSMUSG00000000003 129 285
ENSMUSG00000000003 286 426
ENSMUSG00000000004 0 42
ENSMUSG00000000004 43 159
ENSMUSG00000000004 160 246
ENSMUSG00000000004 247 2569
即A文件的第二列可以看成一个长度,在B文件中给出数值区间,如第一行,190可以转化为0 190, 第二行在190的基础上加上153,就是343,这时候的起始数字为190+1,则这行为ENSMUSG00000000001 191 343,在计算的时候,根据第一列的不同,要分开来算,如到了ENSMUSG00000000002,这里的129又重新定义为0 129.
请问如何实现,谢谢大家!

 【代码】

awk '{s=a[$1]++?e+1:0;e=b[$1]++?e+$2:$2;print $1,s,e}' file

【解析】

   该句只是算法巧妙些,没用到什么技术知识!唯一用到时三目表达式,变量s为起点,e为终点!

posted @ 2013-12-10 21:29  lottu  阅读(326)  评论(0)    收藏  举报