例如,在本awk
教程中有三个示例:
tolower($1) ~ /mary/ { print "CI Record: " $0; }
$0 !~ /Mary/ { print "Not Mary: " $0; }
$1 == "Mary" { print "Mary Record: " $0; }
在 awk 中,$0
是整行参数,而$1
只是由空格分隔的参数列表中的第一个参数。因此,如果我通过 awk 输入“Mary had a little lamb”,$1
就是“Mary”,而是$0
“Mary had a little lamb”。第二行试图在给 awk 的整行中找到子字符串“Mary”。
实际上# 2
,由于这种语法,示例正在使用正则表达式
/regex/
Mary
这意味着在您的示例中,如果在整行 () 中的任何位置都找不到文字文本,$0
则执行 awk 代码。
而在文字文本和字段#1()$1 == "Mary"
之间进行直接比较。Mary
$1
最后tolower($1) ~ /mary/
再次在字段 #1 上使用 ignre-case 正则表达式匹配,这意味着如果$1
有文本mary
(忽略大小写),则执行其余的 awk 代码。
从链接中的描述(强调我的):
表达式通常是字段之一或对其中一个字段进行操作的结果。例如,下面的 AWK 过滤规则分别展示了如何以不区分大小写的方式将第一个字段与“mary”进行比较,如何匹配所有不包含“Mary”的记录,以及如何对反对“玛丽”的第一场:
所以分解它:
第一:
how to compare the first field to “mary” in a case-insensitive fashion
因为它比较第一个字段,所以它使用$1
如何匹配所有不包含“Mary”的记录,
由于它正在比较所有记录,因此它使用$0
第三个
以及如何将第一个字段与“Mary”进行精确比较:
再次比较第一个字段,所以它使用$1
.