biobaby 发表于 2021-12-11 15:32

按照滑动窗口合并文件不同区间

各位大神好,我这边有一个文件是:一共4列,如下图
index   pos1    pos2    id
1   300 301 a1
1   400 401 a2
1   1500    1501    a3
2   100101a4
2   200 201 a5
2   500 501 a6
2   2000    2001   a7
3   100101a8
3   250 251 a9
3   550 551 a9





现在想要在第一列index相同的情况下 按照200的滑动窗口合并,即: 如果下一行的第一列与上一行的第三列间隔在200之内,则将区间合并, 如果200之内不能合并,则看400之内能否合并 如果400也不能合并,则开启新的一行:输出大概如下:
1   300 401 a1,a2   2
1   1500    1501    a31
2   100501a4,a5,a6 3
2   2000    2001   a7   1
3   100551a8,a9,a10 3



请问大家应该怎么实现呢?

wh7211 发表于 2021-12-13 14:11

回复 1# biobaby


cat 1
index pos1 pos2 id
1 300 301 a1
1 400 401 a2
1 1500 1501 a3
2 100 101 a4
2 200 201 a5
2 500 501 a6
2 2000 2001 a7
3 100 101 a8
3 250 251 a9
3 550 551 a9

awk 'NR>1{if(!a[$1]++){if(b){print b,c,d,e,f};b=$1;c=$2;d=$3;e=$4;f=1;next};if(($2-d)<400){d=$3;e=e","$4;f++}else{print b,c,d,e,f;c=$2;d
=$3;e=$4;f=1}}END{if(b){print b,c,d,e,f}}' 1
1 300 401 a1,a2 2
1 1500 1501 a3 1
2 100 501 a4,a5,a6 3
2 2000 2001 a7 1
3 100 551 a8,a9,a9 3
页: [1]
查看完整版本: 按照滑动窗口合并文件不同区间