免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4861 | 回复: 22
打印 上一主题 下一主题

请教如去除多段文本里的重复行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-08 10:47 |只看该作者 |倒序浏览
本帖最后由 lbbei 于 2012-03-08 10:48 编辑

请教如去除多行文本里的重复行?

有一多段文件,如何判断每一段里是否存在重复行?如果有,把重复行删除,该怎么实现?

* 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
2001 07 21 07 56 40.300   BAI  041.85900
2001 07 21 07 57 19.700   AKE  041.14500
2001 07 21 07 55 28.300   XIN   043.56400
2001 07 21 07 57 19.700   AKE  041.14500
2001 07 21 07 56 01.600   BAI  041.85900
* 2001 09 13 20 00 29.000  41.36670   75.51670  15.000
2001 09 13 20 01 22.000   WUQ   039.74900
2001 09 13 20 01 24.700   ATU  039.80400
2001 09 13 20 01 42.500   AHE  040.93500
* 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
2001 07 21 07 56 40.300   BAI  041.85900
2001 07 21 07 57 19.700   AKE  041.14500
2001 07 21 07 55 28.300   XIN   043.56400
2001 07 21 07 57 19.700   AKE  041.14500
比如第一段和第三段里有两个 BAI和AKE, 而且它后面跟的数值相同,如何删后面多余的那一行?要用到数组吗?麻烦高手帮忙指点


论坛徽章:
0
2 [报告]
发表于 2012-03-08 10:50 |只看该作者
是要去重吗?

论坛徽章:
0
3 [报告]
发表于 2012-03-08 10:57 |只看该作者
awk '{++a[$0]}END{for (i in a)print i}' file

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2012-03-08 11:02 |只看该作者
awk '!a[$0]++'

论坛徽章:
0
5 [报告]
发表于 2012-03-08 11:16 |只看该作者
fangtong2008 发表于 2012-03-08 10:57
awk '{++a[$0]}END{for (i in a)print i}' file


不对啊,是以段为单位的,去掉每一段里相同的,不是说把所有重复都去掉。生成的文件应该是:

* 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
2001 07 21 07 56 40.300   BAI  041.85900
2001 07 21 07 57 19.700   AKE  041.14500
2001 07 21 07 55 28.300   XIN   043.56400
* 2001 09 13 20 00 29.000  41.36670   75.51670  15.000
2001 09 13 20 01 22.000   WUQ   039.74900
2001 09 13 20 01 24.700   ATU  039.80400
2001 09 13 20 01 42.500   AHE  040.93500
* 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
2001 07 21 07 56 40.300   BAI  041.85900
2001 07 21 07 57 19.700   AKE  041.14500
2001 07 21 07 55 28.300   XIN   043.56400

论坛徽章:
0
6 [报告]
发表于 2012-03-08 11:18 |只看该作者
本帖最后由 yangkyo821 于 2012-03-08 12:05 编辑
  1. awk '!a[$0]++;/^\*/{delete a}' file
复制代码
  1. * 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
  2. 2001 07 21 07 56 40.300   BAI  041.85900
  3. 2001 07 21 07 57 19.700   AKE  041.14500
  4. 2001 07 21 07 55 28.300   XIN   043.56400
  5. * 2001 09 13 20 00 29.000  41.36670   75.51670  15.000
  6. 2001 09 13 20 01 22.000   WUQ   039.74900
  7. 2001 09 13 20 01 24.700   ATU  039.80400
  8. 2001 09 13 20 01 42.500   AHE  040.93500
  9. * 2001 07 21 07 55 13.300  43.81670   84.23330  16.000  
  10. 2001 07 21 07 56 40.300   BAI  041.85900
  11. 2001 07 21 07 57 19.700   AKE  041.14500
  12. 2001 07 21 07 55 28.300   XIN   043.56400
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-03-08 11:18 |只看该作者
  1. awk '!a[$0]++' infile
复制代码
如果只判断倒数第一和第二列的话,可以改成:
  1. awk '!a[$(NF-1) FS $NF]++' infile
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2012-03-08 11:25 |只看该作者
回复 5# lbbei

段 本身重复 呢? (第一,三段重复...)
   

论坛徽章:
0
9 [报告]
发表于 2012-03-08 11:54 |只看该作者
jason680 发表于 2012-03-08 11:25
回复 5# lbbei

段 本身重复 呢? (第一,三段重复...)


段本身不重复的,段本身由每段第一行控制

论坛徽章:
0
10 [报告]
发表于 2012-03-08 12:05 |只看该作者
本帖最后由 lbbei 于 2012-03-08 12:09 编辑
yangkyo821 发表于 2012-03-08 11:18


有点问题,不管把第一段的怎么换位置结果里都有2个 BAI,其它段都没事, 这是什么问题呢?第一段出现两遍的话也是,复制的那一遍也有两个BAI。纳闷的是我把BAI行故意多复制几遍,结果里就是有两个。。。在其它段里重复的就没问题,能删掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP