나는 매우 특정한 문제를 안고 있으며 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