Linux awk脚本中的$0和$1(美元符号0或1)是什么?

Linux awk脚本中的$0和$1(美元符号0或1)是什么?,linux,awk,Linux,Awk,: 为什么1和3比较$1和2使用$0?实际上,由于这种语法,示例#2使用正则表达式 /regex/ 这意味着在您的示例中,如果整行($0)中没有找到文本Mary),则执行awk代码 而$1==“Mary”正在对文本Mary和字段1($1)进行直接比较 最后,tolower($1)~/mary/再次在字段#1上使用ignre case regex match,这意味着如果$1有文本mary(忽略大小写),则执行awk代码的其余部分。在awk中,$0是整行参数,而$1只是由空格分隔的参数列表中的第

:

为什么
1
3
比较
$1
2
使用
$0

实际上,由于这种语法,示例
#2
使用正则表达式

/regex/
这意味着在您的示例中,如果整行(
$0
)中没有找到文本
Mary
),则执行awk代码

$1==“Mary”
正在对文本
Mary
和字段1(
$1
)进行直接比较


最后,
tolower($1)~/mary/
再次在字段#1上使用ignre case regex match,这意味着如果
$1
有文本
mary
(忽略大小写),则执行awk代码的其余部分。

在awk中,
$0
是整行参数,而
$1
只是由空格分隔的参数列表中的第一个参数。所以如果我把“玛丽有一只小羊羔”放在awk中,
$1
是“玛丽”,但是
$0
是“玛丽有一只小羊羔”。第二行试图在给awk的整行中找到子字符串“Mary”。

来自链接中的描述(我的重点):

表达式通常是其中一个字段或 对其中一个字段的操作。例如,下面的AWK 筛选规则分别显示如何将第一个字段与进行比较 “mary”不区分大小写,如何匹配所有记录 不包含“Mary”,以及如何首先对进行精确比较 field反对“Mary”:

因此,将其分解:

第一个:

 how to compare the first field to “mary” in a case-insensitive fashion
因为它比较第一个字段,所以使用
$1

如何匹配所有不包含“Mary”的记录

由于它比较所有记录,因此使用
$0

第三个

以及如何将第一个字段与“Mary”进行精确比较:


比较第一个字段,所以它使用的是<代码> $1 < /C>。

你不应该考虑使用AWK,直到你可以很容易地回答这些问题,因为它们是绝对基本的。这就像给我们看一道数学题,然后问“+”是什么意思。获取阿诺德·罗宾斯的《有效的Awk编程》第三版。同意@EdMorton。顺便说一句,我正在投票重新讨论这个问题:它的标题引发了大量的访问,一个恰当的答案加上一个好的解释可以让这个话题更加清晰。
 how to compare the first field to “mary” in a case-insensitive fashion