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为终点!

浙公网安备 33010602011771号