awk脚本中的$ 0和$ 1(美元符号0或1)是多少?

时间:2013-03-26 20:57:56

标签: linux awk

in awk

 1  tolower($1) ~ /mary/ { print "CI Record: " $0; }
 2  $0 !~ /Mary/ { print "Not Mary: " $0; }
 3  $1 == "Mary" { print "Mary Record: " $0; }

为什么13使用$1来比较2$0

3 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:9)

实际上,示例# 2正在使用正则表达式,因为这种语法

/regex/

在您的示例中,如果在整行(Mary)中找不到文字文本$0,则表示执行awk代码。

$1 == "Mary"正在对文字Mary和字段#1($1)进行直接比较。

最后tolower($1) ~ /mary/再次在字段#1上使用ignre-case正则表达式匹配,这意味着如果$1具有文本mary(ignore-case),则执行其余的awk代码。

答案 2 :(得分:2)

从链接中的描述(强调我的):

  

表达式通常是字段之一或结果   其中一个字段的操作。例如,以下AWK   过滤规则显示,分别,如何比较第一个字段   “玛丽”以不区分大小写的方式,如何匹配所有记录   不包含“Mary”,以及如何对进行精确比较   字段反对“玛丽”:

所以打破它:

第一个:

 how to compare the first field to “mary” in a case-insensitive fashion

因为它正在比较第一个字段,所以它使用$1

  

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

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

第三个

  

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

再次比较第一个字段,因此使用$1