如何将字段分隔符设置为空字符串?

How to set the field separator to an empty string?

awk 手册指出 -v FS-F 都是设置字段分隔符的等效方法。

The GNU Awk User’s Guide -> 4.5.4 Setting FS from the Command Line:

FS can be set on the command line. You use the `-F' argument to do so.

(...)

The value used for the argument to `-F' is processed in exactly the same way as assignments to the built-in variable FS.

但是,我注意到如果我们将它设置为一个空字符串是有区别的,它是不一样的。在我的 GNU Awk 4.1.1.

上测试

这个有效:

$ awk -F, '{print }' <<< "a,b,c"
b
$ awk -v FS=, '{print }' <<< "a,b,c"
b

但这不是:

$ awk -F="" '{print }' <<< "abc"
                                      #  contains abc
$ awk -v FS="" '{print }' <<< "abc"
b

为什么?这是因为将 FS 设置为空是 gawk 特定的吗?

看起来你可以这样做:

$ awk -F '' '{print }' <<< "abc"
b

在 GNU awk(版本 3.0.4 和 4.1.1)和 mawk 版本 1.2 上测试

需要说明的是,-F''之间的space很重要

Why? Is this because setting FS to empty is a gawk specific?

请注意,标准规定如果将空字符串分配给 FS,则结果未指定。 awk 的某些版本将产生您在上面示例中显示的输出。 OS/X 上的 awk 版本发出警告和输出。

awk: field separator FS is empty

所以将FS设置为空字符串的特殊含义,在每个awk.

中都不起作用