这是一个错误,现在git repo中已提供修复程序。
我无法理解FS
中的抑扬符。
例如,这是我的file
:
$ cat file
foo bar
baz quz
我写了这个awk脚本:
BEGIN{FS="^.";OFS="|"}{$1=$1}1
并期待此输出:
|oo bar
|uz baz
但是用gawk我得到了:
$ gawk 'BEGIN{FS="^.";OFS="|"}{$1=$1}1' file
||o bar
||z quz
越来越多的点变得陌生:
$ gawk 'BEGIN{FS="^..";OFS="|"}{$1=$1}1' file
||bar
||quz
$ gawk 'BEGIN{FS="^...";OFS="|"}{$1=$1}1' file
||r
||z
$ gawk 'BEGIN{FS="^....";OFS="|"}{$1=$1}1' file
|bar
|quz
我在POSIX awk specification和gawk manual中都找不到解释。你们能帮我了解发生了什么吗?我在这里想念什么?
答案 0 :(得分:3)
这显然是一个错误,并且可能是内存泄漏。当您要求之前打印NF
时,行为是按预期的:
$ gawk 'BEGIN{FS="^.";OFS="|"; $0="foo"; $1=$1; print}'
||oo
$ gawk 'BEGIN{FS="^.";OFS="|"; $0="foo"; $1=$1; print NF; print}'
2
|oo