为什么awk字段分隔符不适用于 s



我运行这样的命令:

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:]]字符类。或者,如果只想匹配一个或多个空格()字符,则可以使用CCD_8(后面跟着加号的单个空格)。

最新更新