单个 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
我正在处理一个文件,其中字段由单个 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