单个 space 作为 awk 的字段分隔符

single space as field separator with awk

我正在处理一个文件,其中字段由单个 space 分隔。

awk 将 FS " " 解释为 "one or more whitespace",当其中一个字段为空时,它会误读我的文件。

我尝试使用 "a space not followed by a space"( " (?! )" ) 作为 FS,但 awk 不支持负前瞻。像 "single space field separator awk" 这样简单的 google 查询只把我带到解释 FS=" " 特殊处理的手册页。我一定是错过了相关的手册页...

如何使用单个 space 作为 awk 的字段分隔符?

这应该有效

$ echo 'a    b' | awk -F'[ ]' '{print NF}'
5

其中,这将所有连续的白色 space 视为一个。

$ echo 'a    b' | awk -F' ' '{print NF}'
2

根据评论,需要特别考虑,空字符串或白色 space 作为字段值非常不同,可能不适合白色 space 分隔的内容。

我建议使用 cut 进行预处理并更改分隔符,例如

$ echo 'a    b' | cut -d' ' -f1,3,5 --output-delimiter=,
a,,b