我已经尝试了多次谷歌搜索,但没有一个建议的答案适用于我下面的例子。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