免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk数组加?: 求详细解释 [复制链接]

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 17:54 |只看该作者 |倒序浏览
本帖最后由 tank064 于 2012-09-07 17:55 编辑

[root@test ~]# cat a.log
1 a
1 b
2 c
2 d
2 e
3 f


[root@test ~]# cat a.log |awk '{a[$1]=a[$1] ?a[$1]","$2: $2}END{for(i in a)print i,a}'
1 a,b
2 c,d,e
3 f


请帮忙详细解释下执行过程!

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
2 [报告]
发表于 2012-09-07 18:17 |只看该作者
本帖最后由 tank064 于 2012-09-07 18:18 编辑

[quote]tank064 发表于 2012-09-07 17:54
{a[$1]=a[$1]?a[$1]","$2: $2}
我一直纠结于 对于当前行,a[$1]=a[$1]这个判断是一直都为真,那这里用 ?:结构有什么意义呢?

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
3 [报告]
发表于 2012-09-07 18:19 |只看该作者
tank064 发表于 2012-09-07 18:17
[quote]tank064 发表于 2012-09-07 17:54
{a[$1]=a[$1]?a[$1]","$2: $2}
我一直纠结于 对于当前行,a[$1 ...


还是说理解不对,大大们来解答下!

论坛徽章:
0
4 [报告]
发表于 2012-09-07 18:42 |只看该作者
a[$1]?a[$1]","$2: $2       如果a[$1]为真返回a[$1]","$2否则返回$2

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2012-09-07 18:51 |只看该作者
本帖最后由 jason680 于 2012-09-07 18:52 编辑

回复 2# tank064


# cat a.log |awk '{a[$1]=(a[$1]?a[$1]","$2:$2)}END{for(n in a)print n,a[n]}'
1 a,b
2 c,d,e
3 f


a[$1]=(a[$1]?a[$1]","$2:$2)
it is as same as below:
if(a[$1]){a[$1]=a[$1]","$2}else{a[$1]=$2}

论坛徽章:
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
6 [报告]
发表于 2012-09-07 19:52 |只看该作者
回复 2# tank064


    判断是对 a[$1]的判断,而不是 a[$1]=a[$1]的判断。

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
7 [报告]
发表于 2012-09-07 20:31 |只看该作者
回复 5# jason680
可以帮忙解释下详细处理过程吗,在这个例子中a[$1]=a[$1]?a[$1]","a[$2]:a[$2]  a[$1]岂不都返回a[$1]","a[$2]   对于第一行a[$1] 存的内容是什么? 是1么,如果是,那么第一行执行完之后,a[$1]中的内容是 1,a 么 "  唉,不明白! 可以给分析下么!


   

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
8 [报告]
发表于 2012-09-07 20:34 |只看该作者
回复 6# blackold
黑哥也来了啊,可以帮忙给小弟分析下详细过程么?

   

论坛徽章:
0
9 [报告]
发表于 2012-09-07 22:18 |只看该作者
你这个例子能执行成功吗?
我得到以下error信息:
awk: (FILENAME=- FNR=6) fatal: attempt to use array 'a' in a scalar context

论坛徽章:
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
10 [报告]
发表于 2012-09-07 22:26 |只看该作者
本帖最后由 blackold 于 2012-09-08 08:39 编辑

回复 8# tank064


    哪里不懂?
  1. 第一行时, a[$1]为空为假,所以, 执行a[$1]=a[$1]?a[$1] "," $2:$2 后, a[$1]为$2, 即a[1]=a.

  2. 第二行时,a[$1]不为空为真,所以,执行a[$1]=a[$1]?a[$1] "," $2:$2 后, a[$1]为原来的a[$1] “," $2,即a[1]为 a,b

  3. ...
复制代码
晕,变成表情了,用代码来表示吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP