免费注册 查看新帖 |

Chinaunix

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

如何用awk按组合关键字删除重复行 [复制链接]

论坛徽章:
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
11 [报告]
发表于 2010-05-19 15:10 |只看该作者
本帖最后由 expert1 于 2010-05-19 15:22 编辑

to 11 F

awk '{print $1}' wokao |sort |uniq

awk '{a[$1]=$1}END{for (i in a)print a}' wokao

论坛徽章:
0
12 [报告]
发表于 2010-05-19 15:13 |只看该作者
回复 9# blackold


    #awk 'NR==FNR&&!($1 in array)&&$2!=0{array[$1]=$0}NR>FNR&&!($1 in array){array[$1]=$0}END{for(i in array){print array}}' test92.txt test92.txt
PBCSPOFT0101    96
PBCSPOFT0102    6
PBCSPOFT0103    8
PBCSPOFT0104    0
PBCSPOFT0105    0
PBCSPOFT0106    0
PBCSPOFT0107    10
PBCSPOFT0108    0


没问题啊黑哥~ 不过这个不如export写的好·

论坛徽章:
0
13 [报告]
发表于 2010-05-19 15:14 |只看该作者
  1. awk '{if($2 != 0) {print;b[$1]++;}else a[$1]++;}END{for(cnt in a) if((!(cnt in b ))&& a[cnt] == 1) print cnt,"0"}' file
复制代码
贴个挫的。。。。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
14 [报告]
发表于 2010-05-19 15:16 |只看该作者
回复 12# iori809


PBCSPOFT0101    96
PBCSPOFT0101    96

对于样本数据是对的,但不符合逻辑。比如有重复的行就不行了。

论坛徽章:
0
15 [报告]
发表于 2010-05-19 15:17 |只看该作者
awk '/..../ {print $10}' access_log  这个可以执行
awk '/..../ {!($10 in a){a[$10]=$10}END{for(i in a)print a[i]}}' access_log  用这个对$10做消重的时候语法错,错在哪里呢?

论坛徽章:
0
16 [报告]
发表于 2010-05-19 15:19 |只看该作者
回复 11# expert1


    谢谢哥,|sort |uniq 这个好用,呵呵

论坛徽章:
0
17 [报告]
发表于 2010-05-19 15:19 |只看该作者
回复 15# bbyyzhang


    大括号 的个数 位置。。。。

论坛徽章:
0
18 [报告]
发表于 2010-05-19 15:24 |只看该作者
回复 9# blackold


    我想删除第一个字段重复的且第二个字段为0的行,

[root@commserver: /tmp]#awk 'NR==FNR{a[$1]++;next}$2!=0||a[$1]==1' test92.txt test92.txt
PBCSPOFT0101    96
PBCSPOFT0101    96
PBCSPOFT0102    6
PBCSPOFT0103    8
PBCSPOFT0104    0
PBCSPOFT0105    0
PBCSPOFT0106    0
PBCSPOFT0107    10
PBCSPOFT0108    0
[root@commserver: /tmp]#awk 'NR==FNR&&!($1 in array)&&$2!=0{array[$1]=$0}NR>FNR&&!($1 in array){array[$1]=$0}END{for(i in array){print array}}' test92.txt test92.txt
PBCSPOFT0101    96
PBCSPOFT0102    6
PBCSPOFT0103    8
PBCSPOFT0104    0
PBCSPOFT0105    0
PBCSPOFT0106    0
PBCSPOFT0107    10
PBCSPOFT0108    0


您的和我的。最大的不一样就在于对第一列重复且第二列不为零的情况,按照LZ的需求应该是合并吧~我的那个等于给覆盖了,您这个还记录着次数

论坛徽章:
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
19 [报告]
发表于 2010-05-19 15:24 |只看该作者
最近发现论坛很垃圾,不好使,11楼的数组a[i]都显示不出来,我编辑的时候还有。晕,而且时常访问不了,很无语。

其实楼主一楼的问题是个逻辑问题,A并且B,是不是等于非A或者非B啊?应该是这样的吧^_^。搞晕了都。

论坛徽章:
0
20 [报告]
发表于 2010-05-19 15:25 |只看该作者
本帖最后由 bbyyzhang 于 2010-05-19 15:27 编辑

使用awk '/..../ {print $10}' access_log |sort |uniq消重后的结果不彻底
因为$10有些是有时间戳的,如:
"http://××.com/××/aa.htm?nekot=2bvS1be71274159055441"
我怎么对这个结果再消重呢?
就是去掉?nekot=2bvS1be71274159055441 这个再消重
想一行命令搞定,不写中间文件,因为没有写权限
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP