免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5112 | 回复: 1

[文本处理] 按照滑动窗口合并文件不同区间 [复制链接]

论坛徽章:
0
发表于 2021-12-11 15:32 |显示全部楼层
各位大神好,我这边有一个文件是:一共4列,如下图
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





现在想要在第一列index相同的情况下 按照200的滑动窗口合并,即: 如果下一行的第一列与上一行的第三列间隔在200之内,则将区间合并, 如果200之内不能合并,则看400之内能否合并 如果400也不能合并,则开启新的一行:输出大概如下:
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,a10 3



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

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2021-12-13 14:11 |显示全部楼层
回复 1# biobaby


  1. cat 1
  2. index pos1 pos2 id
  3. 1 300 301 a1
  4. 1 400 401 a2
  5. 1 1500 1501 a3
  6. 2 100 101 a4
  7. 2 200 201 a5
  8. 2 500 501 a6
  9. 2 2000 2001 a7
  10. 3 100 101 a8
  11. 3 250 251 a9
  12. 3 550 551 a9

  13. 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
  14. =$3;e=$4;f=1}}END{if(b){print b,c,d,e,f}}' 1
  15. 1 300 401 a1,a2 2
  16. 1 1500 1501 a3 1
  17. 2 100 501 a4,a5,a6 3
  18. 2 2000 2001 a7 1
  19. 3 100 551 a8,a9,a9 3
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP