AWK: Subconjunto condicional aninhado de linhas

1

Eu tenho uma pergunta bastante específica e consegui encontrar lotes em subconjuntos condicionais usando o awk, mas nenhum que empresta código explícito suficiente para eu generalizar a minha situação. Eu tenho um arquivo 'keys' e um arquivo 'features'. A tabela 'keys' contém duas variáveis, KEY e GROUP, exemplo de brinquedo abaixo.

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

O arquivo 'features' contém uma lista de recursos de widgets, como

    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

Estou tentando selecionar todas as linhas para um ID que tenha um valor de 'KEY' que esteja na coluna 'KEY' de 'keys' para uma lista codificada de valores 'GROUP'. O resultado desejado é

    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

Alguma idéia?

    
por mlegge 10.06.2014 / 19:00

1 resposta

1

Tente isto:

$ 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
    
por 10.06.2014 / 19:37

Tags