2015-10-06 62 views
0

使用awk通过字符来解析在命令行字符的字符串:为什么与FS的速记和速记版本有不同的结果?

echo "foo" | awk 'BEGIN { FS = "" }{ for (n=1; n<=NF; n++) print $n }' 

工作正常。我们也可以在命令行上设置FS的值。然而这样的:

echo "foo" | awk -F '' '{ for (n=1; n<=NF; n++) print $n }' 

产生以下错误信息:

awk: field separator FS is empty 

为什么不这两种方法返回相同的结果?

重要:GNU的bash,版本3.2.57(1)-release下(x86_64-苹果darwin14)

+1

你是否想在第二个例子中错过尾随的'''? – Droppy

+0

与编辑,第二条陈述作品 – amdixon

+0

糟糕。刚刚纠正了。 – user2243670

回答

0

更新您的AWK的版本?

$ bash --version | head -n1 
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu) 
$ gawk --version | head -n 1 
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.3, GNU MP 6.0.0) 
$ mawk -W version 
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan 

compiled limits: 
max NF    32767 
sprintf buffer  2040 
$ echo "foo" | gawk -F '' '{ for (n=1; n<=NF; n++) print $n }' 
f 
o 
o 
$ echo "foo" | mawk -F '' '{ for (n=1; n<=NF; n++) print $n }' 
f 
o 
o 
$ echo "foo" | gawk 'BEGIN { FS = "" }{ for (n=1; n<=NF; n++) print $n }' 
f 
o 
o 
$ echo "foo" | mawk 'BEGIN { FS = "" }{ for (n=1; n<=NF; n++) print $n }' 
f 
o 
o