AWK:行的嵌套条件子集

AWK:行的嵌套条件子集

我有一个非常具体的问题,并且已经能够使用 awk 找到很多有关条件子集的信息,但没有一个可以为我提供足够明确的代码来概括我的情况。我有一个文件“keys”和一个文件“features”。 “keys”表包含两个变量,KEY 和 GROUP,示例如下。

    KEY        GROUP
    ---        -----
    1          GROUP0
    2          GROUP0
    3          GROUP1
    4          GROUP1
    5          GROUP2
    6          GROUP2  

文件“features”包含小部件的功能列表,如下所示

    ID          FEATURE      VALUE
    --          -------      -----
    A           num_user     10
    A           KEY          4
    B           num_user     2
    B           KEY          2
    B           battery      Large
    C           num_user     10
    C           KEY          15
    D           num_user     2
    D           KEY          2
    D           battery      Small
    E           num_user     2
    E           KEY          7
    E           battery      Small

我正在尝试选择 ID 的所有行,该 ID 的值为“KEY”,该 ID 位于“keys”的“KEY”列中,用于“GROUP”值的硬编码列表。期望的结果是

    ID          FEATURE      VALUE
    --          -------      -----
    A           num_user     10
    A           KEY          4
    B           num_user     2
    B           KEY          2
    B           battery      Large
    D           num_user     2
    D           KEY          2
    D           battery      Small

有任何想法吗?

答案1

尝试这个:

$ awk '
    FNR == NR {if (FNR > 2) { k[$1] } next}
    FNR > 2 {
        id[$1] = ($1 in id) ? id[$1] = id[$1]"\n"$0 : id[$1] = $0;
        if ($2 ~ /KEY/) { v[$1] = $3 };
        next;
    }
    1
    END {
        for (val in v) {
            if (v[val] in k) {
                print id[val];
            }
        }
    }
' keys features
ID          FEATURE      VALUE
--          -------      -----
A           num_user     10
A           KEY          4
B           num_user     2
B           KEY          2
B           battery      Large
D           num_user     2
D           KEY          2
D           battery      Small

相关内容