为什么awk字段分隔器不能与\s一起使用?

为什么awk字段分隔器不能与\s一起使用?,awk,field,Awk,Field,我运行如下命令: echo "aaa bbb ccc dddd" | awk -F "\\s+" '{print $1,$2}' 预期输出为aaa bbb 但实际上,字段分隔器不起作用 为什么??请任何人帮忙好吗?因为awk将字段分隔符值\\s视为普通的s。您需要再次转义它,以便它告诉awk它不是一个普通的s,而是一个匹配所有空格的特殊元字符 $ echo "aaa bbb ccc dddd" | awk -F "\\\s+" '{print $1,$2}' aaa bbb

我运行如下命令:

echo "aaa bbb  ccc    dddd" | awk -F "\\s+" '{print $1,$2}'
预期输出为
aaa bbb

但实际上,字段分隔器不起作用


为什么??请任何人帮忙好吗?

因为awk将字段分隔符值
\\s
视为普通的
s
。您需要再次转义它,以便它告诉awk它不是一个普通的
s
,而是一个匹配所有空格的特殊元字符

$ echo "aaa bbb  ccc    dddd" | awk -F "\\\s+" '{print $1,$2}'
aaa bbb

在这种情况下,绝对不需要调整字段分隔符,因为默认分隔符完全符合您的要求:

echo "aaa bbb  ccc    dddd" | awk '{print $1,$2}'
将为您提供所需的输出


\s
字符类仅在某些较新版本的awk中可用。如果您发现在另一个上下文中需要它,您可以使用POSIX
[[:space:]
字符类。或者,如果您只想匹配一个或多个空格(
)字符,您可以使用
+
(即一个空格后跟一个加号)。

这个
怎么办
回显“aaa bbb ccc dddd”| awk'{print$1,$2}'
?它确实有效,但我遇到了一些问题,需要使用正则表达式设置字段分隔符,因此,我想找出\s无法工作的原因,谢谢。我安装了mawk,但仍然没有得到预期的输出:(请尝试回显“aaa bbb ccc dddd”| awk-v FS=“\\\s+”{print$1,$2}“< /代码>我不知道它为什么对你不适用。但是我的AWK版本是“代码> GNU AWK 4.0.1仍然不工作,可能是我的环境问题,谢谢你。我的版本是GNU AWK 3.1.5。在以前的版本中,它不会考虑<代码> <代码>作为空间char。这个<代码>回声“AAA BBB CCC DDDD”。{print$1,$2}'
应该适用于您的版本。