【问题标题】:What are $0 and $1 (dollar sign 0 and 1) in an awk script? [closed]awk 脚本中的 $0 和 $1(美元符号 0 和 1)是什么? [关闭]
【发布时间】:2013-03-16 20:24:09
【问题描述】:

例如this awk教程中有三个例子:

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

【问题讨论】:

  • 在您自己能够轻松回答这些问题之前,您甚至不应该考虑使用 awk,因为它们绝对是基本的。这就像向我们展示一个数学问题并询问“+”是什么意思。获取 Arnold Robbins 所著的《Effective Awk Programming, 第三版》一书。
  • 同意@EdMorton。顺便说一句,我投票重新提出这个问题:它的标题引发了很多访问,并且一个带有良好解释的正确答案可以清楚地说明这个话题。

标签: linux awk


【解决方案1】:

在 awk 中,$0 是整行参数,而 $1 只是由空格分隔的参数列表中的第一个参数。因此,如果我通过 awk 输入“Mary had a little lamb”,$1 是“Mary”,但 $0 是“Mary had a little lamb”。第二行试图在给 awk 的整行中查找子字符串“Mary”。

【讨论】:

    【解决方案2】:

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

    /regex/
    

    这意味着在您的示例中,如果在整行 ($0) 的任何位置都找不到文字文本 Mary,则执行 awk 代码。

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

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

    【讨论】:

      【解决方案3】:

      来自您链接中的描述(强调我的):

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

      所以分解它:

      第一个:

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

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

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

      由于是比较所有记录,所以使用$0

      第三个

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

      再次比较第一个字段,所以它使用$1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-28
        • 2016-07-08
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 2016-05-16
        相关资源
        最近更新 更多