免费注册 查看新帖 |

Chinaunix

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

去重复-新情况 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-23 03:00 |只看该作者 |倒序浏览
本帖最后由 yinyuemi 于 2011-02-23 04:52 编辑

今天在“The UNIX and Linux Forums”上看到一个关于去重复的帖子,觉得以前没有看过这样的例子,大家可以练练手:>

  1. cat file

  2. 2 B:M 17
  3. 3 M:B 16
  4. 4 B:M 15
  5. 5 M:B 14
  6. 6 M:B 13
  7. 7 B:M 11
  8. 9 B:M 27
  9. 10 B:M 26
  10. 11 M:B 25
  11. 13 B:M 6
  12. 14 B:M 5
  13. 15 M:B 4
  14. 16 B:M 3
  15. 17 M:B 2
  16. 19 A:M 3
  17. 22 A:B 14
  18. 23 A:M 6
  19. 24 A:B 13
  20. 25 B:M 11
  21. 26 M:B 10
复制代码
2 B:M 17 和 17 M:B 2
3 M:B 16 和 16 B:M 3
……
为重复,要求是保留第一个,除去第二个。

下面是我写的,觉得不够简练,应该还能更简练
  1. awk -F"[:| ]" '{a[$1$2$3$4]=1;b[NR]=$0}{if($4$3$2$1 in a) c[NR]=1}END{for(i=1;i<=NR;i++) {if(!(i in c)) print b[i]}}' file
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2011-02-23 10:08 |只看该作者
up,没什么思路,

论坛徽章:
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
3 [报告]
发表于 2011-02-23 10:35 |只看该作者
今天在“The UNIX and Linux Forums”上看到一个关于去重复的帖子,觉得以前没有看过这样的例子,大家可以练 ...
yinyuemi 发表于 2011-02-23 03:00


awk -F"[: ]" '{if(!(a[$4$3$2$1]==1||a[$1$2$3$4]==1))print;a[$1$2$3$4]=1}' file

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-02-23 10:42 |只看该作者
awk -F"[: ]" '{if(!(a[$4$3$2$1]==1||a[$1$2$3$4]==1))print;a[$1$2$3$4]=1}' file
jason680 发表于 2011-02-23 10:35



    赞!!!

你的还可以在精炼一下
  1. awk -F"[: ]" '!(a[$4$3$2$1]||a[$1$2$3$4]){print;a[$1$2$3$4]=1}' 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
5 [报告]
发表于 2011-02-23 10:55 |只看该作者
回复 4# yinyuemi


意思到了就好了.....
再精练只是字数(code长度)问题,没有多大意义....

相同思维...(改用正向判断与next)
awk -F"[: ]" '{if(a[$4$3$2$1]||a[$1$2$3$4])next;print;a[$1$2$3$4]=1}' file

论坛徽章:
2
白羊座
日期:2013-10-29 13:29:222015亚冠之全北现代
日期:2015-10-25 08:13:02
6 [报告]
发表于 2011-02-23 11:01 |只看该作者
如果所谓的“重复” 就是 “直接反转” ,那没什么意思!

论坛徽章:
0
7 [报告]
发表于 2011-02-23 13:22 |只看该作者
本帖最后由 ywlscpl 于 2011-02-23 13:25 编辑
  1. awk -F '[: ]+' '!a[$4$3$2$1]++;{a[$1$2$3$4]++}' file
复制代码
正向重复和逆向重复都去

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2011-02-23 13:57 |只看该作者
正向重复和逆向重复都去
ywlscpl 发表于 2011-02-23 13:22



    学习,多谢白云苍狗兄!

论坛徽章:
0
9 [报告]
发表于 2011-02-24 11:44 |只看该作者
回复 7# ywlscpl


    这样写 更清晰点

awk -F '[: ]+' '!a[$4$3$2$1]++;{print ;a[$1$2$3$4]=1}' file

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2011-02-24 13:29 |只看该作者
sed的

  1. sed -rn '/^[ \t]*$/d;H;x;s/[ \t]//g;
  2. /\n([^\n]+)(.):(.)([^\n]+)\n(.*\n)?(\1\2:\3\4|\4\3:\2\1)$/{x;d;};x;p' urfile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP