2015-10-06 38 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