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