如何将字段分隔符设置为空字符串?
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
.
中都不起作用
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
.