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

하드코드된 "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

관련 정보