file1
次のように、ユーザーがファイルに表示される回数を含むファイルがあります。
4 userC
2 userA
1 userB
file2
ユーザーやその他の情報を含む他のファイルがあります。
userC, degree2
userA, degree1
userB, degree2
各レベルのユーザーの発生回数を示す出力が必要です。
5 degree2
2 degree1
答え1
純粋なawk
:
$ awk -F'[, ]' 'NR==FNR{n[$2]=$1;next}{m[$3]+=n[$1]}
END{for(i in m){print i " " m[i]}}' \
file1 file2
degree1 2
degree2 5
または、次のスクリプトに入れることもできます。
#!/usr/bin/awk -f
BEGIN {
FS="[, ]"
}
{
if (NR == FNR) {
n[$2] = $1;
next;
} else {
m[$3] += n[$1];
}
}
END {
for (i in m) {
print i " " m[i];
}
}
フィールド区切り文字をコンマとスペースに設定することで始めます(BEGIN
ブロックや-F
コマンドラインオプションなど)。
次に、最初のファイル(FNR == NR
慣用語)を解析するときに、ユーザーの接続数をユーザー名でインデックス付けされた配列に入れます。次のファイルを解析するとき、ユーザーグループごとにインデックス付けされた配列に各ユーザーの接続数を追加します。
最後に(END
ブロック)配列全体をスキャンし、キーと値のペアを印刷します。