列中的组编号和bash中另一列中的总和

时间:2016-04-19 10:32:19

标签: bash awk

希望将列中用户定义距离内的数字分组,并将bash中文件中另一列中的相应值相加。 这是示例文件

D   seq 1876    A   seq 3802    31
D   seq 1877    A   seq 3803    104
D   seq 13691   A   seq 14117   15
D   seq 13694   A   seq 14120   65

因此,如果用户将合并的距离定义为5,那么样本输出将类似于

D,seq,1876-1877,A,seq,3802-3803,135
D,seq,13691-13694,A,seq,14117-14120,85

1 个答案:

答案 0 :(得分:0)

这样的东西?

awk -v d=5 '{
    a[NR]=$3;
    b[NR]=$6
}
(a[NR]-a[NR-1] > d || b[NR]-b[NR-1] > d){
    if(NR!=1){
        print "D seq",s"-"a[NR-1],"A seq",t"-"b[NR-1],c
    };
    c=$NF;
    s=$3;
    t=$6;
    next
}
{
    c+=$NF
}
END{
    print "D seq",s"-"a[NR],"A seq",t"-"b[NR],c'
}' file.txt

其中d具有距离值。