免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell awk help
12
最近访问板块 发新帖
楼主: tt_yy123
打印 上一主题 下一主题

awk help [复制链接]

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

论坛徽章:
0
12 [报告]
发表于 2011-11-15 14:36 |只看该作者
本帖最后由 tt_yy123 于 2011-11-15 14:42 编辑

黑哥
    if(!(a[$0])) {print }

这地方还是没明白???
是不是这样解释呢?第一文件,a[$0]=1 则为真打印
第二个文件如果有数值和第一个文件相同 !(a[$0])就为假,则不打印呢?如果不相同,则a[$0]还默认和前面一样为1,则打印呢?

论坛徽章:
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
13 [报告]
发表于 2011-11-15 14:59 |只看该作者
本帖最后由 blackold 于 2011-11-15 15:02 编辑

回复 12# tt_yy123


    你一楼的注释已经说得很清楚了。


  if(!(a[$0])) {print }

是不是这样解释呢?第一文件,a[$0]=1 则为真打印

这已经读到第二个文件了。

第二个文件如果有数值和第一个文件相同 !(a[$0])就为假,则不打印呢?如果不相同,则a[$0]还默认和前面一样为1,则打印呢?


读第一个文件时,初始化数组 a, 读第二个文件时,检查 $0(也就是行)是否在第一个文件中出现过,是(即a[$0]等1,为真, !a[$0]为假),则不输出,否,则输出。

如果不相同,则a[$0]还默认和前面一样为1,则打印呢?


如果不相同,a[$0]为空串,为假,所以!a[$0]为真,于是就打印了。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
14 [报告]
发表于 2011-11-15 15:58 |只看该作者
合并file1和file2,除去重复项:
awk 'NR==FNR{a[$0]=1;print}   #读取file1,建立数组a,下标为$0,并赋 ...
tt_yy123 发表于 2011-11-14 17:58



    打个标记,说明第一个文件中此行已经有了

论坛徽章:
0
15 [报告]
发表于 2011-11-15 15:59 |只看该作者
回复 13# blackold


    谢谢黑哥,是不是如果第一个文件和第二个文件的数据如果有相同的a[$0]=1就会遗传下去,否则就重新初始化为空。

论坛徽章:
0
16 [报告]
发表于 2011-11-15 16:19 |只看该作者
本帖最后由 tt_yy123 于 2011-11-15 16:29 编辑

回复 7# zooyo


   以下文本,要求后面的重复消息只输出最后一行,

QUOTE:Nov 11:12:13 aa bb cc
Nov 12:12:14 aa bb cc
Nov 12:12:15 xx bb cc


如上的2行 aa bb cc只输出最后一行的aa bb cc

输出为
Nov 12:12:14 aa bb cc
Nov 12:12:15 xx bb cc


最佳答案 zooyo
本帖最后由 zooyo 于 2011-11-12 00:11 编辑

顺序随机:

awk '{a[$3$4$5]=$0}END{for(i in a)print a}' file  

顺序输出:
awk '!a[$3$4$5]++&&i{print i}{i=$0}END{print i}' file
复制代码
非数组:
awk 'NR>1{if($3$4$5!=x)print y}{x=$3$4$5;y=$0}END{print y}' file
复制代码
sed版:
sed 'N;/.*\(\( ..\)\{3\}\)\n.*\1/!P;D' file
复制代码

学习中,第一个看明白了。后三个能解释下么?

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
17 [报告]
发表于 2011-11-15 17:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP