免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: BlueBlack
打印 上一主题 下一主题

怎样删除某列中重复的字符串? 谢谢 [复制链接]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
21 [报告]
发表于 2009-01-06 16:15 |只看该作者
原帖由 ywlscpl 于 2009-1-6 15:59 发表

[Copy to clipboard] [ - ]CODE:
#awk -F "," '{for (i=1;i<=NF;i++) a[$i]=$i;for (j in a) if (a[j]!="") printf a[j]",";printf "\n";for (i=1;i<=NF;i++) a[$i]=""}' urfile
10.1.2.3,172.23.2.34,10.2.3.4,
172.23.12.35,10.1.2.4,10.2.3.78,
10.2.1.65,10.7.8.79,
顺序乱了,而且最后多了个,
  1. awk -F, '{for(i=1;i<=NF;i++) if($i!="") {a[$i]++;b[i]=$i} for(i=1;i<=NF;i++) {if((i in b) && (b[i] in a)){printf "%s%s", c++?",":"", b[i];delete a[b[i]]}} printf "\n";delete a;c=0}' urfile
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
22 [报告]
发表于 2009-01-06 16:28 |只看该作者
  1. awk -F, '{printf $1;a[$1]=1;for(i=2;i<=NF;i++) if(!a[$i]++) printf ","$i;delete a;print ""}' urfile
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
23 [报告]
发表于 2009-01-06 16:31 |只看该作者
原帖由 ly5066113 于 2009-1-6 16:28 发表
awk -F, '{printf $1;a[$1]=1;for(i=2;i

我输出,号用的++这招, 输出字段没想到用这招

论坛徽章:
0
24 [报告]
发表于 2009-01-06 16:48 |只看该作者
原帖由 ly5066113 于 2009-1-6 16:28 发表
awk -F, '{printf $1;a[$1]=1;for(i=2;i


报错了
  1. 242# cat o1
  2. 172.16.19.46
  3. 172.16.19.21,172.16.19.21,172.16.19.21,172.26.19.21,172.26.19.21,172.26.19.21
  4. 172.16.19.69,172.16.19.69,172.16.19.69,172.26.19.69,172.26.19.69,172.26.19.69
  5. 172.16.19.70,172.16.19.70,172.16.19.70,172.26.19.70,172.26.19.70,172.26.19.70
  6. 243# awk -F, '{printf $1;a[$1]=1;for(i=2;i<=NF;i++) if(!a[$i]++) printf ","$i;de
  7. lete a;print ""}' o1
  8. awk: Syntax error
  9. at line 1 of program << {printf $1;a[$1]=1;f ... >>
复制代码

论坛徽章:
0
25 [报告]
发表于 2009-01-06 16:51 |只看该作者
完美版,去除了最后的,
  1. # cat o1
  2. 172.16.19.46
  3. 172.16.19.21,172.16.19.21,172.16.19.21,172.26.19.21,172.26.19.21,172.26.19.21
  4. 172.16.19.69,172.16.19.69,172.16.19.69,172.26.19.69,172.26.19.69,172.26.19.69
  5. 172.16.19.70,172.16.19.70,172.16.19.70,172.26.19.70,172.26.19.70,172.26.19.70
  6. #awk -F "," '{printf $1",";for (i=2;i<=NF;i++) {a=i-1;if ($i!=$a) printf $i","}printf "\n"}' o1| awk '{print substr($0,1,length($0)-1)}'
  7. 172.16.19.46
  8. 172.16.19.21,172.26.19.21
  9. 172.16.19.69,172.26.19.69
  10. 172.16.19.70,172.26.19.70
复制代码

[ 本帖最后由 ywlscpl 于 2009-1-6 16:52 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
26 [报告]
发表于 2009-01-06 16:55 |只看该作者

回复 #25 ywlscpl 的帖子

先不说逻辑对不对,就为了去个,号加了一个管道?

这个是不就是你想要的效果?
awk -F "," '{printf $1;for (i=2;i<=NF;i++) {a=i-1;if ($i!=$a) printf ","$i}printf "\n"}' o1

你这个只是相临的2个域做比较,如果重复字段出现在不相临的域,你这个是去不掉的。

论坛徽章:
0
27 [报告]
发表于 2009-01-06 18:44 |只看该作者

回复 #26 ly5066113 的帖子

还是不行
172.27.3.11,172.27.3.11,172.27.3.118,172.27.3.118

这种情况的就转变为:
172.27.3.118

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
28 [报告]
发表于 2009-01-06 18:47 |只看该作者
原帖由 BlueBlack 于 2009-1-6 18:44 发表
还是不行
172.27.3.11,172.27.3.11,172.27.3.118,172.27.3.118

这种情况的就转变为:
172.27.3.118

哪种方法不行?

论坛徽章:
0
29 [报告]
发表于 2009-01-06 19:01 |只看该作者

回复 #28 ynchnluiti 的帖子

你的方法要是单独一列就没问题,要是多列的情况下,只操作一列的情况下,你的方法就操作不了,^_^

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
30 [报告]
发表于 2009-01-06 19:05 |只看该作者
原帖由 BlueBlack 于 2009-1-6 19:01 发表
你的方法要是单独一列就没问题,要是多列的情况下,只操作一列的情况下,你的方法就操作不了,^_^

根据需求修改吧
我那段代码写罗嗦了。是根据你举的例子写的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP