免费注册 查看新帖 |

Chinaunix

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

请教如何将分行的内容合并,然后用逗号隔开? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-07-25 15:45 |只看该作者
原帖由 ly5066113 于 2009-7-24 17:06 发表
awk '$1==1{if(i++)printf ","$2;else printf $2}' text

请解释一下吗..
为什么要if(i++)printf ?????

其实很弘时也见到师兄们用awk时, 也会这样{for(i in a)print i,a}, 这又是何解??
我参详了很久也不明, 只是照着用.....

论坛徽章:
0
22 [报告]
发表于 2009-07-29 10:53 |只看该作者
原帖由 xmi 于 2009-7-25 15:45 发表

请解释一下吗..
为什么要if(i++)printf ?????

其实很弘时也见到师兄们用awk时, 也会这样{for(i in a)print i,a}, 这又是何解??
我参详了很久也不明, 只是照着用.....


这个我也想知道。难道是awk内置的一个field position计数器?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
23 [报告]
发表于 2009-07-29 11:28 |只看该作者

回复 #21 xmi 的帖子

if(i++)说明先判断变量i存在与否,再赋值i=i+1,第一次有行满足$1==1的时候i变量不存在默认取0,条件为false,因此就跳转到else部分,就打印一个$2:printf $2;而经过这一行后变量i有有>0的值了,接下来有满足$1==1的行的时候,条件为true,执行printf ","$2

for(i in a)中的i和上面的if(i++)中的i没有联系,i都只是一个awk脚本中的变量而已,没啥特殊的,这个循环可以访问关联数组a中每个元素。

[ 本帖最后由 Minsic 于 2009-7-29 11:30 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP