-1

我有这样的文件

1814 1
2076 2
2076 1
3958 1
2076 2
2498 3
2858 2
2858 1
1818 2
1814 1
2423 1
3588 12
2026 2
2076 1
1814 1
3576 1
2005 2
1814 1
2107 1
2810 1

我想生成这样的报告

1814 3
2076 6
3958 1
2858 3

基本上计算第 1 列中每个唯一值的总数

4

4 回答 4

5

使用 awk:

awk '{s[$1] += $2} END{ for (x in s) print x, s[x] }' input
于 2013-05-23T04:02:43.793 回答
2

纯重击:

declare -a sum

while read key val ; do
  ((sum[key]+=val))
done < "$infile"

for key in ${!sum[@]}; do
  printf "%4d %4d\n" $key ${sum[$key]}
done

输出排序:

1814    4
1818    2
2005    2
2026    2
2076    6
2107    1
2423    1
2498    3
2810    1
2858    3
3576    1
3588   12
3958    1
于 2013-05-23T08:29:22.137 回答
0

Perl 解决方案:

perl -lane '$s{$F[0]} += $F[1] }{ print "$_ $s{$_}" for keys %s' INPUT

请注意,输出与您提供的不同。

于 2013-05-23T05:44:38.690 回答
0

每个主键的总和(仅限整数)

for key in $(cut -d\  -f1 test.txt | sort -u)
do
   echo $key $(echo $(grep $key test.txt | cut -d\  -f2 | tr \\n +)0 | bc)
done

简单地将一列整数相加

echo $(cut -d\  -f2 test.txt | tr \\n +)0 | bc
于 2014-03-14T20:29:03.897 回答