如何将预定义变量传递到awk列函数中?

如何将预定义变量传递到awk列函数中?,awk,Awk,我想传递一个预定义变量作为awk脚本的列号。我已经去掉了不必要的部分,下面是我想做的一个例子。下面是我到目前为止尝试的部分内容 原因:这是一个半长的脚本,目前可以运行,不过我想在脚本的早期定义列,因为这将使脚本在列更改时更容易更新 我希望将“state”变量传递给awk的列标识符,例如: #/bin/bash 导出状态=“$6” cat~/file | awk-v列=“$state””状态=“失败” 运行上述代码会生成列6确实为“FAILED”的行,因此一定是出了什么问题。而awk'$6=“失

我想传递一个预定义变量作为awk脚本的列号。我已经去掉了不必要的部分,下面是我想做的一个例子。下面是我到目前为止尝试的部分内容

原因:这是一个半长的脚本,目前可以运行,不过我想在脚本的早期定义列,因为这将使脚本在列更改时更容易更新

我希望将“state”变量传递给awk的列标识符,例如:

#/bin/bash
导出状态=“$6”
cat~/file | awk-v列=“$state””状态=“失败”
运行上述代码会生成列6确实为“FAILED”的行,因此一定是出了什么问题。而
awk'$6=“失败”
按预期工作

到目前为止,我尝试了不同的方法:

  • 将$state定义为6而不是“$6”,并在awk中包含$指挥部
  • awk'{ENVIRON[“state”]!=“FAILED”}
    ,修改与1相同
  • 这应该起作用:

    state=6
    cat ~/file | awk -v column="$state" '$column != "FAILED"'
    
    awk中的
    $var
    将获得变量
    var
    的值指定的字段。 因此,
    $NF
    将获得最后一个字段。请注意,这里的awk变量是
    ,而不是
    状态

    例如:

    % seq 1 20 | paste - - - -
    1   2   3   4
    5   6   7   8
    9   10  11  12
    13  14  15  16
    17  18  19  20
    % seq 1 20 | paste - - - - | awk -v column=3 '{print $column}'
    3
    7
    11
    15
    19
    

    在那里,您不需要
    cat
    ,awk可以自己读取文件。除此之外,LGTM将
    重命名为
    awkvar
    并将
    状态
    重命名为
    shellvar
    。现在你明白你的问题是什么了吗?