私は非常に特定の問題を抱えており、awkを使用してサブセット条件について多くを見つけることができましたが、どちらも私の状況に一般化できるほど明確なコードを提供しませんでした。 「keys」ファイルと「features」ファイルがあります。タイトルなし。 「keys」テーブルには、次のように、KEYとGROUP(それぞれ最初の列と2番目の列)の2つの変数が含まれています。
1 GROUP0
2 GROUP0
3 GROUP1
4 GROUP1
5 GROUP2
6 GROUP2
"features"ファイルには、このようなウィジェットの機能のリストが含まれています(それぞれID、FEATURE、VALUEの最初、2番目、および3番目の列)。
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を持つすべての行を選択しようとしています。必要な結果は次のとおりです。
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の3段階の方法です。
FNR == 1 {
fn++ # counter for File Number, starts at 1
}
fn == 1 {
key[$1] = 1 # first file: store keys
}
fn == 2 && $2 == "KEY" && $3 in key {
id[$1] = 1 # second file, first pass: store id's
}
fn == 3 && $1 in id # second file, 2nd pass: print rows
上記がに保存されているとし、selectrows.awk
次のように使用します。
awk -f selectrows.awk keys.txt features.txt features.txt
または、1行にすべて記入してください。
awk 'FNR == 1 {f++}; f == 1 {k[$1]}; f == 2 && $2=="KEY" && $3 in k {i[$1]}; f == 3 && $1 in i' keys.txt features.txt features.txt