Awk 目瞪口呆匹配一个单词-一个意外匹配
我想获得第3列中的所有匹配项,这些匹配项在第3列的字符串中具有确切的单词“aa”(不区分大小写的匹配) awk文件中使用的gawk命令是:Awk 目瞪口呆匹配一个单词-一个意外匹配,awk,Awk,我想获得第3列中的所有匹配项,这些匹配项在第3列的字符串中具有确切的单词“aa”(不区分大小写的匹配) awk文件中使用的gawk命令是: $3 ~ /\<aa\>/ $3~/\/ BEGIN语句指定:IGNORECASE=1 该命令返回20行。令人费解的是,返回行第3列中的这个值: aA.AHAB 我如何避免这一行,因为它本身不是一个单词,因为前两个aa后面有点,没有空格?第一个解决方案:或要精确匹配aa请尝试: awk 'BEGIN{IGNORECASE=1} $3 ~ /
$3 ~ /\<aa\>/
$3~/\/
BEGIN语句指定:IGNORECASE=1
该命令返回20行。令人费解的是,返回行第3列中的这个值:
aA.AHAB
我如何避免这一行,因为它本身不是一个单词,因为前两个aa后面有点,没有空格?第一个解决方案:或要精确匹配aa
请尝试:
awk 'BEGIN{IGNORECASE=1} $3 ~ /^aa$/' Input_file
第二种解决方案:或不带IGNORECASE
选项尝试:
awk 'tolower($3)=="aa"' Input_file
第一种解决方案:或要完全匹配aa
请尝试:
awk 'BEGIN{IGNORECASE=1} $3 ~ /^aa$/' Input_file
第二种解决方案:或不带IGNORECASE
选项尝试:
awk 'tolower($3)=="aa"' Input_file
A
是一个单词字符<代码>不是单词字符<代码>\>匹配单词末尾的零宽度字符串。这种零宽度字符串出现在a
和
之间
要搜索由空格字符(或行首/行尾)分隔的字符串aa
:
在集合中添加您关心的任何其他字符([]
)
请注意,默认情况下,awk将记录拆分为空白字段,因此除非您更改了
FS
A
是单词字符的值,否则在$3
中不会得到任何空格<代码>不是单词字符<代码>\>匹配单词末尾的零宽度字符串。这种零宽度字符串出现在a
和
之间
要搜索由空格字符(或行首/行尾)分隔的字符串aa
:
在集合中添加您关心的任何其他字符([]
)
请注意,默认情况下,awk将记录拆分为空白字段,因此除非您更改了FS
的值,否则在$3
中不会得到任何空格
问题:为什么awk正则表达式模式/\/
与“aa.bbb”这样的字符串匹配
我们可以通过以下方式快速验证这一点:
$ echo aa.bbb | awk '/\<aa\>/'
aa.bbb
如果在代码中定义了字段分隔符FS
,则以下操作可能有效
" "$3" " ~ /" aa "/
$3 ~ /(^|[ ])aa([ ]|$) # See solution of JHNC
问题:为什么awk正则表达式模式/\/
与“aa.bbb”这样的字符串匹配
我们可以通过以下方式快速验证这一点:
$ echo aa.bbb | awk '/\<aa\>/'
aa.bbb
如果在代码中定义了字段分隔符FS
,则以下操作可能有效
" "$3" " ~ /" aa "/
$3 ~ /(^|[ ])aa([ ]|$) # See solution of JHNC
你说的“确切的词”是什么意思<代码>aA在
aA中。AHAB
是一个完整的单词。如果$3
必须等于aa
,则使用$3~/^aa$/
$3~/^aa$/
可能有效(未测试)。您所说的“精确单词”是什么意思<代码>aA在aA中。AHAB
是一个完整的单词。如果$3
必须等于aa
,则使用$3~/^aa$/
$3~/^aa$/
可能有效(未测试)。IGNORECASE
适用于任何字符串比较和正则表达式匹配。IGNORECASE
适用于任何字符串比较和正则表达式匹配。它有效。我已经了解了上面的正则表达式是如何工作的,以及它提供的灵活性。谢谢你的工作。我已经了解了上面的正则表达式是如何工作的,以及它提供的灵活性。谢谢