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

时间:2015-06-30 10:02:39

标签: awk gawk

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

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

  

可以在命令行上设置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

但这不是:

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

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

2 个答案:

答案 0 :(得分:5)

  

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

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

awk: field separator FS is empty

因此,将FS设置为空字符串的特殊含义在每个awk中都不起作用。

答案 1 :(得分:4)

看起来你可以这样做:

 <system.web>
 <authentication mode="Forms">
  <forms loginUrl="~/index.aspx" defaultUrl="~/index.aspx"/>
  </authentication>
 </system.web>

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

上测试

要明确的是,$ awk -F '' '{print $2}' <<< "abc" b -F之间的空间 重要