免费注册 查看新帖 |

Chinaunix

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

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

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

回复 9# samsun639
a[$1]=a[$1] ?a[$1]","$2: $2     这里中间多了个空格!$2: $2  不打空格 会显示为表情!


   

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
12 [报告]
发表于 2012-09-07 22:45 |只看该作者
回复 10# blackold
谢谢黑哥提点,明白了,谢谢!


   

论坛徽章:
0
13 [报告]
发表于 2012-09-08 03:15 |只看该作者
初学阶段......虽然看不懂,但仍仔细的看着......

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

论坛徽章:
0
15 [报告]
发表于 2012-09-10 00:07 |只看该作者
本帖最后由 Diao_Cow 于 2012-09-10 00:11 编辑

先分析作者解决方法的思路:
1 a
1 b
2 c
2 d
2 e
3 f

以数字作为key,若多个key的value相同,多个value以逗号相隔,譬如,key为1就是 a,b

所以我第一次写的代码如下:
  1. awk '{a[$1]=a[$1] "," $2;} END {for( i in a ){print i, a[i]}}' a.log
复制代码
其中红色部分是字符串拼接(a[$1] "," $2)

但是发现输出的结果如下:

1 ,a,b
2 ,c,d,e
3 ,f

好吧,知道自己错哪了吧,要对第一个元素判空,只有已经存在一个元素时,才往后面添加一个,

现在再看作者的代码,应该比较明了了吧

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
16 [报告]
发表于 2012-09-10 09:36 |只看该作者
回复 15# Diao_Cow
嗯,谢谢!


   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00IT运维版块每日发帖之星
日期:2015-08-07 06:20:00
17 [报告]
发表于 2012-10-16 13:16 |只看该作者
回复 10# blackold

   黑哥好 我看了你的解释 明白了怎么处理的过程 但还是有下面一些困惑
    我想问一下 a[$1]=a[$1]这个是针对a[$1]的判断而不是对这个表达式的判断吗 有什么出处吗?  还有a[$1]  (1. 如果进行数值运算,则赋予初值0 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
18 [报告]
发表于 2012-10-16 16:45 |只看该作者
本帖最后由 blackold 于 2012-10-16 16:45 编辑

回复 17# linuxforlive


   
linuxforlive, 你好!

1.
   
我想问一下 a[$1]=a[$1]这个是针对a[$1]的判断而不是对这个表达式的判断吗 有什么出处吗?
  1. a[$1]=a[$1]?a[$1] "," $2:$2;
复制代码
这是一条完整的语句;
  1. a[$1]?a[$1] "," $2:$2
复制代码
是条件表达式,求值之后再赋给a[$1]。

2.
空就是假。 awk 规定就是这样。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00IT运维版块每日发帖之星
日期:2015-08-07 06:20:00
19 [报告]
发表于 2012-10-19 10:16 |只看该作者
回复 18# blackold


    好的 谢谢黑哥了

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
20 [报告]
发表于 2012-10-19 11:10 |只看该作者
好像运行不了吧!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP