LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 956|回复: 6

这个awk有点怪(确认是BUG了)

[复制链接]
发表于 2010-6-9 18:34:46 | 显示全部楼层 |阅读模式
原文件为:file
行1             3.4   5.6    7.8
行2           12.6  3.2    9.0
                  ......
也就是原数据是后对齐的。
这两个命令结果就是不一样:
1>  awk  '{printf("%f,%f,%f\n",$1,$2,$3)}'  file
结果:3.4   5.6    7.8
2>  awk -F'[, \t]+'  '{printf("%f,%f,%f\n",$1,$2,$3)}'  file
结果:5.6    7.8   0.0
但1和下面的输出一样:
awk -F'[, \t]+'  '{printf("%f,%f,%f\n",$2,$3,$4)}'  file
也就是awk多认了一个参数,不解中.......
发表于 2010-6-9 20:49:12 | 显示全部楼层
用cat -v file一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-10 15:14:22 | 显示全部楼层
好象不是解决问题的办法,这个问题是指定和不指定分隔符差异很大(分隔符是一样的)
回复 支持 反对

使用道具 举报

发表于 2010-6-11 04:00:43 | 显示全部楼层
二楼的意思是,你的数据文件可能有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-17 16:07:13 | 显示全部楼层
数据没问题,你自己做个试验就知道了

附件有数据和方法的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2010-6-17 20:54:55 | 显示全部楼层
这个不是 bug
gawk.info  中看到过
FS 仅有一个空格时,会忽略每个 record 开头的空白


3.5 Specifying How Fields Are Separated
=======================================

看最后一段
回复 支持 反对

使用道具 举报

发表于 2010-6-17 21:00:58 | 显示全部楼层
默认的FS是空格,这时的FS是有超级定义的。会把行前的空格也去掉,别的定义的FS都没有这个功能,所以行前空格会被认为是第一个数据和第二个数据的分割,因而产生一个空的$1。
这个也不算是Bug,习惯就好了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表