免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk统计重复和不重复的个数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-01 15:55 |只看该作者 |倒序浏览
在1列相同的条件下,awk统计第2列的不重复个数
在1、2列值同时相同的条件下,awk统计第3列的重复个数
cat a.txt
W6;WA;T0
W6;WA;T1
W6;WB;T4
W6;WB;T5
W6;WB;T6
想得到结果
W6;WA;T0;2;2
W6;WA;T1;2;2
W6;WB;T4;2;3
W6;WB;T5;2;3
W6;WB;T6;2;3

现在仅得出重复的个数
nawk  'BEGIN{OFS=FS=";"}NR==FNR{a[$1]++;b[$2]++;next}{print $0,a[$1],b[$2]}' 1.txt 1.txt
能否帮忙修改一下?谢谢

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
2 [报告]
发表于 2013-06-01 16:52 |只看该作者
回复 1# conall
  1. awk 'BEGIN{FS=OFS=";"}NR==FNR{if(!a[$1,$2]++)an[$1]++;if(!b[$1,$2,$3]++)bn[$1,$2]++;next}{print $0,an[$1],bn[$1,$2]}' input input
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
3 [报告]
发表于 2013-06-01 17:11 |只看该作者
@conall
  1. awk  'BEGIN{OFS=FS=";"}NR==FNR{if(!b[$1$2]++)a++;next}{ print $0,a,b[$1$2]}' a a
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-06-01 22:56 |只看该作者
其实之前论坛有个关于awk 关于统计不重复的案例,
awk '{a[$1]++}!b[$0]++{c[$1]++}END{for (i in a)print i,a[i],c[i]}' file ————————运行出现“b[: Event not found.”的错误.此例子运行也是这样,b[: Event not found.

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
5 [报告]
发表于 2013-06-02 14:13 |只看该作者
回复 4# conall
我google了一下,当!被当作history命令时,可能出现这种错误。
你检查一下:
1.是单引号不要用双引号。
2.在!前面加\试试。

论坛徽章:
0
6 [报告]
发表于 2013-06-03 11:57 |只看该作者
谢谢cao627,井蛙夏虫,在!前面加\解决
awk  'BEGIN{OFS=FS=";"}NR==FNR{if(\!b[$1$2]++)a++;next}{ print $0,a,b[$1$2]}' a a
但是,若改下条件:
1。在1列相同的条件下,awk统计第2列的不重复个数
2。在1、2列值同时相同的条件下,awk统计第3列的不重复个数
3.统计1列重复的个数
cat a.txt
W6;WA;T0
W6;WA;T1
W6;WB;T4
W6;WB;T5
W6;WB;T6
想得到结果
W6;WA;T0;2;2;5
W6;WA;T1;2;2;5
W6;WB;T4;2;3;5
W6;WB;T5;2;3;5
W6;WB;T6;2;3;5

论坛徽章:
0
7 [报告]
发表于 2013-06-03 12:04 |只看该作者
nawk 'BEGIN{FS=OFS=";"}NR==FNR{ if(c[$1]++)cn[$1]++;if(\!a[$1,$2]++)an[$1]++;if(\!b[$1,$2,$3]++)bn[$1,$2]++;next}{print $0,an[$1],bn[$1,$2],cn[$1]}' 1.txt 1.txt
W6;WA;T0;2;2;4
W6;WA;T1;2;2;4
W6;WB;T4;2;3;4
W6;WB;T5;2;3;4
W6;WB;T6;2;3;4

怎么都是4而不是5?

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
8 [报告]
发表于 2013-06-03 12:35 |只看该作者
回复 7# conall
统计1列重复的个数:
直接cn[$1]++;不需要条件判断

   

论坛徽章:
0
9 [报告]
发表于 2013-06-03 12:48 |只看该作者
嗯,谢谢!但是如果判断也不会有问题啊?!怎么会差一个呢?能告诉阁下的QQ吗?谢谢

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
10 [报告]
发表于 2013-06-03 13:04 |只看该作者
回复 9# conall
如果判断的话,第一次时c[$1]为0,条件不成立,所以少加一次。
我很少使用QQ。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP