5

最初の列に名前があり、2 番目の列に数があるファイルがあります。名前順に並んでいます。

    dan 3355
    dan 667
    dan 889
    frank 8
    frank 99
    frank 90
    ian 9

同じ名前をすべて組み合わせて、各名前の合計数を出力したいと思います。

    dan 4911
    frank 197
    ian 9

同じ行の合計数を取得するために uniq を使用できることはわかっていますが、データに含まれている数をどのように保持できますか?

4

2 に答える 2

5

awk の連想配列を利用できます。

 awk '{arr[$1]+=$2;} END {for (i in arr) print i, arr[i]}' filename
于 2012-11-30T17:15:47.997 に答える
1

awkの連想メモリを使用しても、名前が入力と同じ順序で出力に表示されることは保証されません(また、大規模なデータセットの場合はメモリ効率が悪くなる可能性があります)。

代わりに以下を使用してください

awk '(NR==1){oldname=$1;s=$2;next};
     (oldname == $1){s=s+$2;next};
     {print oldname, s;oldname=$1s=$2;next}
     END{print oldname,s}'
于 2012-11-30T23:55:56.763 に答える