Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166245
  • 博文数量: 21
  • 博客积分: 2371
  • 博客等级: 大尉
  • 技术积分: 217
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-15 18:36
文章分类

全部博文(21)

文章存档

2010年(6)

2009年(15)

分类:

2009-02-08 14:43:32

file
 

#
1
2
3
#
4
5
#
6
7
8
9
#

输出为

1,2,3
4,5
6,7,8,9

 

[root@Mylinux tmp]# awk 'BEGIN{RS="#";OFS=","}NF=NF' file
1,2,3
4,5
6,7,8,9

阅读(5117) | 评论(10) | 转发(0) |
0

上一篇:awk心得笔记

下一篇:strftime函数

给主人留下些什么吧!~~

kenshinsee2009-02-25 21:39:15

aix下NF=NF还是$1=$1都无法实现功能,可能太老了ksh版本 我想这次我理解应该正确了吧,其实完整写法应该是 awk 'BEGIN{RS="#";OFS=","}{NF=NF;if(NF){print $0}}' file 没有action的NF=NF和NF=NF;if(NF){print $0}是等价的 其实赋值这步也可以这样明显看出 awk 'BEGIN{RS="#";OFS=","}{$10=$10;if(NF){print $0}}' file 字段不足10的全部为空,以逗号分隔 谢谢BZ,有不懂还会来问哦,呵呵

ywlscpl2009-02-25 15:41:53

不过严谨的用法还是用 awk 'BEGIN{RS="#";OFS=","}{NF=NF;print}' file 或awk 'BEGIN{RS="#";OFS=","}{$1=$1;print}' file 因为如果file中有空行或$1为空的行 awk 'BEGIN{RS="#";OFS=","}NF=NF' file awk 'BEGIN{RS="#";OFS=","}$1=$1' file 的用法会丢失这些行

ywlscpl2009-02-25 15:34:00

你还是没明白 awk 'BEGIN{RS="#";OFS=","}NF' file 这样没有对NF进行操作,新的OFS不会生效。 如果你的awk版本较老,NF=NF可能不会让OFS生效,用$1=$1就可以了

kenshinsee2009-02-25 09:31:37

那是就是说NF=NF替换成一个NF也是等价的呢 awk 'BEGIN{RS="#";OFS=","}NF' file 由于公司是AIX的老版本ksh,貌似上面例子都无法得到正确答案,回家再试试

ywlscpl2009-02-25 07:38:37

---------------- $n=$n,n一定要小于等于字段数,不然字段数小于n的行不会被显示出来 ---------------- 并不是你理解的这样 $n=$n等价于$n{print},如果n>字段数,$n为空,即为0,后面的action{print}不执行。NF=NF亦同理等价于NF{print} 这个在我心的笔记第2点中有讲 --------- awk 'var=xx' awk省略action的写法,默认action就是{print},但稍有特殊,其执行了var=xx的赋值操作,并且用xx作为pattern。 ---------