为什么与FS的速记和速记版本有不同的结果?
问题描述:
使用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)
答
更新您的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
你是否想在第二个例子中错过尾随的'''? – Droppy
与编辑,第二条陈述作品 – amdixon
糟糕。刚刚纠正了。 – user2243670