包含插入符号的 awk 多字符字段分隔符无法按预期工作



我已经尝试了多次谷歌搜索,但没有一个建议的答案适用于我下面的例子。NF 应该是 3,但我不断得到 1。

# cat a
1^%2^%3
# awk -F^% '{print NF}' a
1
# awk -F'^%' {print NF}' a
1
awk -F "^%" {print NF}' a
1

awk中的-F变量采用正则表达式作为其值。因此,值^被解释为一种特殊的锚正则表达式模式,需要将其特殊含义剥夺。所以你用文字反斜杠字符转义它

awk -F'\^%' '{ print NF }'

来自 GNU Awk 转义序列手册

反斜杠字符本身是另一个通常不能包含的字符;您必须编写\才能在字符串或正则表达式中放置一个反斜杠。因此,其内容为两个字符的字符串必须写""\

您应该转义^以删除其特殊含义,该含义被字段分隔符用作正则表达式。一旦你通过执行\^来逃避^,它将被视为正常/文字字符,然后^%将被视为字符串,你会得到答案为3。

awk -F'\^%' '{print NF}' Input_file

这是一个不错的SO链接,您也可以将其作为示例以更好地理解,它没有专门讨论^字符,而是讨论了如何在awk中的字段分隔符中使用转义序列。

https://stackoverflow.com/a/44072825/5866580

最新更新