2008年8月26日星期二

awk中print语句出现莫名奇妙的空格的解决

在调试脚本过程中发现了一个问题:
如 cat /tmp/data.tmp

1 1 1 2007-10-22 16:26:00
1 2 1 2007-10-22 16:26:01
1 3 1 2007-10-22 16:26:01
1 4 1 2007-10-22 16:26:01
1 5 1 2007-10-22 16:26:01
1 6 1 2007-10-22 16:26:02
1 7 1 2007-10-22 16:26:02
1 8 1 2007-10-22 16:26:02
1 9 1 2007-10-22 16:26:02
1 10 1 2007-10-22 16:26:02

使用awk 语句命令 awk ‘ { print $1,”\t”,$2,”\t”,$3 } ‘ /tmp/data.tmp >/tmp/data1.tmp
cat /tmp/data1.tmp

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

看似一样,其实使用vi的话会发现以前数字与数字之间只有水平制表符即”\t”所表示的内容,但是在在data1.tmp中,数字与数字直接多了一个难以察觉的空格。在将该内容load进数据库时,会出现问题。
出问题的地方是我使用awk时,未注意到的”,”的问题。其实在使用awk的print时,只要空格分割就可以。
将语句改成 awk ‘ { print $1 “\t” $2 “\t” $3 } ‘ /tmp/data.tmp >/tmp/data1.tmp

没有评论: