AWK: 行の入れ子になった条件付きサブセット

AWK: 行の入れ子になった条件付きサブセット

私は非常に特定の問題を抱えており、awkを使用してサブセット条件に関する多くの情報を見つけることができましたが、どちらも私の状況に一般化できるほど明確なコードを提供しませんでした。 「keys」ファイルと「features」ファイルがあります。 「keys」テーブルには、次のようにKEYとGROUPという2つの変数が含まれています。

    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

ハードコードされた「GROUP」値のリストに対して、「keys」の「KEY」列に「KEY」値を持つIDを持つすべての行を選択しようとしています。必要な結果は次のとおりです。

    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

おすすめ記事