次の形式の出力があります。
count id type
588 10 | 3
10 12 | 3
883 14 | 3
98 17 | 3
17 18 | 1
77598 18 | 3
10000 21 | 3
17892 2 | 3
20000 23 | 3
63 27 | 3
6 3 | 3
2446 35 | 3
14 4 | 3
15 4 | 1
253 4 | 2
19857 4 | 3
1000 5 | 3
...
これは非常に汚れているため、プロジェクトマネージャに送信してスプレッドシートを混乱させるようにCSVファイルにまとめる必要があります。
問題の核心は次のとおりです。必要な出力は次のとおりです。
id、sum_of_type_1、sum_of_type_2、sum_of_type_3
ID「4」は例です。
14 4 | 3
15 4 | 1
253 4 | 2
19857 4 | 3
これはおそらく次のとおりです。
4,15,253,19871
残念ながら、私はこのようなことをやり直してすべての行を整理してCSVに変換しましたが、行の重複を削除してグループ化することはできません。今私はこれを持っています:
awk 'BEGIN{OFS=",";} {split($line, part, " "); print part[1],part[2],part[4]}' | awk '{ gsub (" ", "", $0); print}'
しかし、やるべきことは、ジャンク文字を整理してその行を再印刷することだけです。
上記の出力に行を適用する最良の方法は何ですか?
ベストアンサー1
一つの方法は、すべてをハッシュに入れることです。
# put values into a hash based on the id and tag
awk 'NR>1{n[$2","$4]+=$1}
END{
# merge the same ids on the one line
for(i in n){
id=i;
sub(/,.*/,"",id);
a[id]=a[id]","n[i];
}
# print everyhing
for(i in a){
print i""a[i];
}
}'
編集:私の最初の答えは質問に正しく答えませんでした。