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
ブロックは)配列全体をスキャンし、キーと値のペアを出力します。