BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


那位高手能否解释下这段awk语句?

首页 » 论坛 » Shell »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
loveoov
精灵



UID:498226
注册:2006-11-30
最后登录: 2008-08-08
帖子:212
精华:0

可用积分:197 (白手起家)
信誉积分:105
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2008-7-2 09:25 


[root@localhost awk]# cat matrix.txt
3 4 5 6
1 2 3 4
0 1 2 3
[root@localhost awk]# awk '{for(i=1;i<=NF;i++)a[i]=(a[i])?a[i]" "$i:$i}END{for(i=1;i<=NF;i++)print a[i]}' matrix.txt
3 1 0
4 2 1
5 3 2
6 4 3[size=3][/size]

小弟愚钝 不得其解

{for(i=1;i<=NF;i++)a[i]=(a[i])?a[i]" "$i:$i}

[ 本帖最后由 loveoov 于 2008-7-2 10:01 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 waker   帅哥 (孩儿他爹㊞)
广告杀手-法王



UID:17255
注册:2002-8-26
最后登录: 2008-09-08
帖子:18576
精华:2

可用积分:11879 (大富大贵)
信誉积分:375
专家积分:545 (本版:153)
空间积分:0
推广积分:0

来自:中国南京
状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2008-7-2 09:32 



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

=GNU/linux=
GNU {bash 2.05b, grep 2.5, Awk 3.1.3, sed 4.0.8}

导师说:站起来吧
众人说:那么辛苦那么艰苦到底值不值?

设计师说:富起来吧
众人说:拼啦

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
灿烂小猪
精灵王



UID:522225
注册:2007-1-25
最后登录: 2008-09-08
帖子:330
精华:0

可用积分:463 (白手起家)
信誉积分:100
专家积分:10 (本版:10)
空间积分:0
推广积分:0

来自:大连
状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2008-7-2 09:34 
a=(a)?a" "$i:$i这是awk的if语句的简写形式,这句相当于
if(a!=0)a=a"$i;else a=$i

如果?前面的表达式为真值,则a等于:号前面的表达式,否则a等于:号后面的表达式。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

CentOS release 4.4 (Final)
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
GNU Awk 3.1.3
GNU sed version 4.1.2
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
edei2004   帅哥 (tao)
圣骑士



UID:604603
注册:2007-8-18
最后登录: 2008-09-08
帖子:104
精华:0

可用积分:146 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...在线...

[个人空间] [短信] [博客]


4楼 发表于 2008-7-2 09:36 
三目运算符吧
(a)为非0或非空是为真,模具取冒号前面的值赋给a   否则取冒号后面的值赋给a



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
loveoov
精灵



UID:498226
注册:2006-11-30
最后登录: 2008-08-08
帖子:212
精华:0

可用积分:197 (白手起家)
信誉积分:105
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-7-2 09:58 


QUOTE:
原帖由 灿烂小猪 于 2008-7-2 09:34 发表
a=(a)?a" "$i:$i这是awk的if语句的简写形式,这句相当于
if(a!=0)a=a"$i;else a=$i

如果?前面的表达式为真值,则a等于:号前面的表达式,否则a等于:号后面的表达式。

不好意思 我编辑的时候好像有问题
这段语句是这样的

{for(i=1;i<NF;i++)a[i]=(a[i])?a[i]" "$i:$i}

[ 本帖最后由 loveoov 于 2008-7-2 10:00 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘

首页 » 论坛 » Shell »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.417945 second(s), 4 queries , Gzip enabled