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

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

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

    1          GROUP0
    2          GROUP0
    3          GROUP1
    4          GROUP1
    5          GROUP2
    6          GROUP2  

"features"ファイルには、このようなウィジェットの機能のリストが含まれています(それぞれID、FEATURE、VALUEの最初、2番目、および3番目の列)。

    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を持つすべての行を選択しようとしています。必要な結果は次のとおりです。

    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の3段階の方法です。

FNR == 1 {
        fn++        # counter for File Number, starts at 1
}

fn == 1 {
        key[$1] = 1 # first file: store keys
}

fn == 2 && $2 == "KEY" && $3 in key {
        id[$1] = 1  # second file, first pass: store id's
}

fn == 3 && $1 in id # second file, 2nd pass: print rows

上記がに保存されているとし、selectrows.awk次のように使用します。

awk -f selectrows.awk keys.txt features.txt features.txt

または、1行にすべて記入してください。

awk 'FNR == 1 {f++}; f == 1 {k[$1]}; f == 2 && $2=="KEY" && $3 in k {i[$1]}; f == 3 && $1 in i' keys.txt features.txt features.txt

おすすめ記事