免费注册 查看新帖 |

Chinaunix

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

筛选出现两次的条目 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-27 18:39 |只看该作者 |倒序浏览
本帖最后由 sequencing 于 2011-12-27 18:39 编辑

想从下列数据中筛选出带*和不带*同时出现的
  1. smith*
  2. brown
  3. deep-brown*
  4. J-smith*
  5. smith
  6. brown*
  7. kent
  8. kent*
  9. green
  10. brilliant
  11. green*
复制代码
结果应为:
  1. smith*
  2. smith
  3. kent*
  4. kent
  5. brown*
  6. brown
  7. green*
  8. green
复制代码
请教大家怎么实现,谢谢!

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

  1. awk '{x=$0;if($0~/\*$/){sub(/\*$/,"",x);b[x]}else{a[x]}}END{for(i in a)if(i in b){print i"*";print i}}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-12-27 19:55 |只看该作者
cjaizss 发表于 2011-12-27 19:40

多谢版主!

论坛徽章:
0
4 [报告]
发表于 2011-12-27 19:59 |只看该作者
支持超过2次的
awk -F '*' '{a[$1]++}a[$1]==2{print b[$1]"\n"$0;next}a[$1]>2;{b[$1]=$0}' file

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
5 [报告]
发表于 2011-12-27 20:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2011-12-27 20:49 |只看该作者
  1. #!/bin/bash
  2. value1=( `sed -n '/.*[^\*]$/p' text26 ` )
  3. value2=( `sed -n '/.*\*/p' text26 | sed 's/\(.*\)\*/\1/g' ` )
  4. for i in ${value1[*]}
  5. do
  6.   for j in ${value2[*]}
  7.   do
  8.     if [ "$i" = "$j" ]
  9.     then
  10.       echo "$j*"
  11.       echo "$i"
  12.     fi
  13.   done
  14. done
复制代码

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

  1. sed -rn '1h;1!H;$!d;
  2. x
  3. s/\n+/\n/g
  4. ta
  5. :a
  6. s/^([^\n]+)\n((.*\n)?)\1\*(\n|$)/\1\*\n\1\2\4/
  7. tb
  8. q
  9. :b
  10. h
  11. s/^([^\n]+\n[^\n]+)(\n.*|$)/\1/p
  12. x
  13. s/^([^\n]+\n[^\n]+)(\n|$)//
  14. ta
  15. '
复制代码
手头没有linux,无法验证其正确性

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2011-12-27 21:12 |只看该作者
cjaizss 发表于 2011-12-27 21:09
写个纯sed的手头没有linux,无法验证其正确性

哦,不对,加*和不加的谁出现在前都很难说
改一下

  1. sed -rn '1h;1!H;$!d;
  2. x
  3. s/\n+/\n/g
  4. ta
  5. :a
  6. s/^([^\n]+)\n((.*\n)?)\1\*(\n|$)/\1\*\n\1\2\4/
  7. tb
  8. s/^([^\n]+)\*\n((.*\n)?)\1(\n|$)/\1\*\n\1\2\4/
  9. tb
  10. q
  11. :b
  12. h
  13. s/^([^\n]+\n[^\n]+)(\n.*|$)/\1/p
  14. x
  15. s/^([^\n]+\n[^\n]+)(\n|$)//
  16. ta
  17. '
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
9 [报告]
发表于 2011-12-27 21:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2011-12-27 22:13 |只看该作者
回复 9# zooyo


    不明白,这有什么好佩服的呢?呵呵。你sed用的也挺熟的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP