免费注册 查看新帖 |

Chinaunix

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

[文本处理] AWK 求教去重复内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-07-25 21:32 |只看该作者 |倒序浏览

如何去除第二列slash左半部分和第三列的重复匹配内容,只显示第三列的,比如


"AAA","27","G0NT71Z0NS/BBBBBB","G0NT71Z0NS","CCC",



"AAA","27","BBBBBB","G0NT71Z0NS","CCC",

多谢

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
2 [报告]
发表于 2018-07-26 15:30 |只看该作者
回复 1# shintoky


  1. echo '"AAA","27","G0NT71Z0NS/BBBBBB","G0NT71Z0NS","CCC",'|awk 'BEGIN{FS=OFS=","}{match($3,"\042([^/]+)/",a);match($4,"([^\042]+)",b);if(a[1]==b[1]){sub(a[1]"/","",$3)}}1'
  2. "AAA","27","BBBBBB","G0NT71Z0NS","CCC",
复制代码

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
3 [报告]
发表于 2018-07-27 10:03 |只看该作者
本帖最后由 christmas1102 于 2018-07-27 20:36 编辑
  1. echo '"AAA","27","G0NT71Z0NS/BBBBBB","G0NT71Z0NS","CCC",'|awk '{while(match($0,/"((\w+)\/?(\w+)?)".?/,a)){d=b==c?a[3]?a[3]:a[1]:a[1];printf "\042"d"\042,";b=a[1];c=a[2];sub(substr($0,RSTART,RLENGTH),"")}print ""}'
  2. 执行结果:
  3. "AAA","27","BBBBBB","G0NT71Z0NS","CCC",
复制代码

  1. echo '"AAA","AAA/ss","27","G0NT71Z0NS/BBBBBB","G0NT71Z0NS","27/CCC"' |\
  2. awk '{while(match($0,/"((\w+)\/?(\w+)?)".?/,a)){d=b==c?a[3]?a[3]:a[1]:a[1];printf "\042"d"\042,";b=a[1];c=a[2];sub(substr($0,RSTART,RLENGTH),"")}print ""}'
  3. 执行结果:
  4. "AAA","ss","27","BBBBBB","G0NT71Z0NS","CCC",
复制代码

论坛徽章:
0
4 [报告]
发表于 2018-07-28 23:52 |只看该作者
回复 2# syscooker
Hi Syscooker,
不好意思,前几天一直在忙,回复晚了。你的方法非常好,我稍作修改即可生效,多谢多谢🙏!


BR

论坛徽章:
0
5 [报告]
发表于 2018-07-29 00:01 |只看该作者
回复 4# wh7211

谢谢你的回复, 其实我的脚步会需要先锁定那列需要修改的row 比如 sn,但是当我要match sn前面一列时就是无法使用 $(sn-1) 不知道为什么。

[root@razorvm Audi_check]# cat 1.csv|head -20 | awk 'BEGIN{FS=",";OFS=","};{for(i=1;i<=NF;i++)if($i ~ /\"Serial Number\"/)sn=i;match($(sn-1),"\042([^/]+)/",a);match($sn,"([^\042]+)",b);if(a[1]==b[1]){sub(a[1]"/","",$3)}}1'

论坛徽章:
0
6 [报告]
发表于 2018-07-29 00:02 |只看该作者
回复 4# wh7211 谢谢你的回复,其实我脚步会需要先匹配那一列SN再修改 SN前一列的重复项,但是不知道为什么就是无法match $(sn-1)

[root@razorvm Audi_check]# cat 1.csv|head -20 | awk '{for(i=1;i<=NF;i++)if($i ~ /\"Serial Number\"/)sn=i;match($(sn-1),"\042([^/]+)/",a);match($sn,"([^\042]+)",b);if(a[1]==b[1]){sub(a[1]"/","",$3)}}1'

论坛徽章:
0
7 [报告]
发表于 2018-07-29 00:03 |只看该作者
回复 4# wh7211 谢谢你的回复,其实我脚步会需要先匹配那一列SN再修改 SN前一列de

[root@razorvm Audi_check]# cat 1.csv|head -20 | awk '{for(i=1;i<=NF;i++)if($i ~ /\"Serial Number\"/)sn=i;match($(sn-1),"\042([^/]+)/",a);match($sn,"([^\042]+)",b);if(a[1]==b[1]){sub(a[1]"/","",$3)}}1'

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
8 [报告]
发表于 2018-07-29 08:54 |只看该作者
回复 6# shintoky

你确定这条代码和你的标题需求相符?match取得是固定列的固定值,然后替换固定列的固定值,你所谓的去重,就是这样的方式来实现的? 那是我理解错,原来去重是靠肉眼先找,然后再去替换

论坛徽章:
0
9 [报告]
发表于 2018-07-29 10:42 |只看该作者
回复 10# christmas1102
Hi christmas1102
那我先锁定 固定列再 去除重复 不就行了么 不存在肉眼判断呀

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
10 [报告]
发表于 2018-07-29 12:58 |只看该作者
回复 11# shintoky

我不是很懂您的意思~  单从2楼的代码:
  1. echo '"AAA","27","G0NT71Z0NS/BBBBBB","G0NT71Z0NS","CCC",' | awk '{match($(NF-2),"\"([^\"]*)\"",a);gsub(a[1]"/","",$3)}1' FS="," OFS=","
复制代码


锁定固定列,match 固定列匹配,sub 固定列替换,前提是肉眼先匹配重复项,请问您这个先锁定固定列,不就是用肉眼先筛选重复项么?要么我理解有问题,请您指出,您所谓的“锁定”是如何锁定?
我诚心求教,您说从二楼代码修改后,就可以用,二楼代码怎么改的,然后就能不用肉眼去重?能不能不吝赐教,把代码发了看看,大家学习下,您可千万不要说 match $1,sub $1 这不是肉眼去重。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP