我有一个非常具体的问题,并且已经能够使用 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
我正在尝试选择 ID 的所有行,该 ID 的值为“KEY”,该 ID 位于“keys”的“KEY”列中,用于“GROUP”值的硬编码列表。期望的结果是
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