在AWK手册表示两个-v FS和-F等同方式来设置字段分隔符.
GNU Awk用户指南 - > 4.5.4从命令行设置FS:
可以在命令行上设置FS.您使用`-F'参数来执行此操作.
(......)
用于"-F"参数的值的处理方式与内置变量FS的赋值完全相同.
但是,我注意到如果我们将它设置为空字符串会有所不同,它是不一样的.测试我的GNU Awk 4.1.1.
这有效:
$ awk -F, '{print $2}' <<< "a,b,c"
b
$ awk -v FS=, '{print $2}' <<< "a,b,c"
b
Run Code Online (Sandbox Code Playgroud)
但这不是:
$ awk -F="" '{print $2}' <<< "abc"
# $1 contains abc
$ awk -v FS="" '{print $2}' <<< "abc"
b
Run Code Online (Sandbox Code Playgroud)
为什么?这是因为设置FS为空是gawk特定的吗?
看起来你可以这样做:
$ awk -F '' '{print $2}' <<< "abc"
b
Run Code Online (Sandbox Code Playgroud)
在 GNU awk(版本 3.0.4 和 4.1.1)和 mawk 版本 1.2 上测试
需要明确的是,和之间的空格很重要!-F''
为什么?这是因为将FS设置为空是特定的gawk吗?
请注意,标准表示如果分配了空字符串,则结果未指定FS.某些版本awk将生成您在示例中显示的输出.awkon 版本OS/X发出警告和输出.
awk: field separator FS is empty
Run Code Online (Sandbox Code Playgroud)
因此设置FS为空字符串的特殊含义并不适用于每一个字符串awk.