Awk 目瞪口呆匹配一个单词-一个意外匹配

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列中的所有匹配项,这些匹配项在第3列的字符串中具有确切的单词“aa”(不区分大小写的匹配) awk文件中使用的gawk命令是:

$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
适用于任何字符串比较和正则表达式匹配。它有效。我已经了解了上面的正则表达式是如何工作的,以及它提供的灵活性。谢谢你的工作。我已经了解了上面的正则表达式是如何工作的,以及它提供的灵活性。谢谢