免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于awk一题的一点困惑 [复制链接]

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00IT运维版块每日发帖之星
日期:2015-08-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-16 11:24 |只看该作者 |倒序浏览
文件内容如下
[root@client1 tmp]# cat b.txt
20121001  testing
20121001  test.192.168.0.1
20121001  time:20

实现格式如下
20121001  192.168.0.1,20

我用这种方式实现 得到下面这种结果
[root@client1 tmp]# cat b.txt | awk 'NR>1{a[$1]=a[$1]? a[$1]"," $22}END{for (i in a)print i,a[i]}' | sed 's/[a-z]//g'
20121001 .192.168.0.1,:20

问题1:我现在a[$1]刚开始是空 还是2012101这个值?   还有无论a[$1]是空还是有值 第一次执行得到的应该都是test.192.168.0.1 然后再执行a[$1]=a[$1]这个一直都是真吧 就会还是得到time:20  中间这个逗号又是怎么来的呢 ( ?:这个运算符 0的时候是取?后面的   !0是:后面的)
望大牛解释一下 或者我这个理解是错的 你们给我解释一下 感觉有点晕了

问题2:能得到要求的语句


谢谢了
   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00IT运维版块每日发帖之星
日期:2015-08-07 06:20:00
2 [报告]
发表于 2012-10-16 11:25 |只看该作者
这个是我写的 上面的有表情
cat b.txt | awk 'NR>1{a[$1]=a[$1]? a[$1]"," $2:$2}END{for (i in a)print i,a[i]}' | sed 's/[a-z]//g'

论坛徽章:
0
3 [报告]
发表于 2012-10-16 12:00 |只看该作者
  1. awk 'NR>1{sub(/[a-z]*[.:]/,"",$2);a[$1]=a[$1]?a[$1]","$2:$2}END{for(i in a)print i,a[i]}' file
复制代码
这种写法可以百度三目运算

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00IT运维版块每日发帖之星
日期:2015-08-07 06:20:00
4 [报告]
发表于 2012-10-16 13:06 |只看该作者
看了这个帖子 和我的疑惑一样  解决了
http://bbs.chinaunix.net/thread-3769891-1-12.html

论坛徽章:
0
5 [报告]
发表于 2012-10-16 14:10 |只看该作者
  1. awk '{if(a[$1]){a[$1]=a[$1]","$2}else{a[$1]=$2}}END{for(i in a)print i,a[i]}' file
复制代码
回复 4# linuxforlive


    这样就比较明了了

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


    谢谢你 你看看我发的那个连接 里面有我那个疑惑
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP