免费注册 查看新帖 |

Chinaunix

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

删除文本中的重复行(sort+uniq/awk/sed) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-03 11:25 |只看该作者 |倒序浏览
在进行文本处理的时候,我们经常遇到要删除重复行的情况。那怎么解决呢?
  下面就是三种常见方法?
  第一,用sort+uniq,注意,单纯uniq是不行的。
shell> sort file | uniq
  这里我做了个简单的测试,当file中的重复行不再一起的时候,uniq将服务删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。
  第二,用sort+awk命令,注意,单纯awk同样不行,原因同上。
shell> sort file | awk '{if ($0!=line) print;line=$0}'
  当然,自己把管道后面的代码重新设计一下,可能不需要sort命令先排序拉。
  第三,用sort+sed命令,同样需要sort命令先排序。
shell> sort file | sed '$!N; /^\(.*\)\n\1$/!P; D'
  最后附一个必须先用sort排序的文本的例子,当然,这个需要用sort排序的原因是很简单,就是后面算法设计的时候的“局部性”,相同的行可能分散出现在不同的区域,一旦有新的相同行出现,那么前面的已经出现的记录就被覆盖了,看了这个例子就好理解拉。
  
ffffffffffffffffff
ffffffffffffffffff
eeeeeeeeeeeeeeeeeeee
fffffffffffffffffff
eeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeee
gggggggggggggggggggg
  其实,这是我随便打进去的几行字,没想到就是必须用sort的很好例子,大家可以自己试试看。
参考资料:
[1] SED单行脚本快速参考
http://linux.chinaitlab.com/administer/381792.html
[2] 如何删除重复的行(sed或awk)
http://www.linuxsir.org/bbs/showthread.php?t=132848


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16743/showart_1810861.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP