使用shell脚本的文本文件中的列的总和

时间:2013-05-23 03:50:38

标签: bash shell

我有这样的文件

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 个答案:

答案 0 :(得分:5)

使用awk:

awk '{s[$1] += $2} END{ for (x in s) print x, s[x] }' input

答案 1 :(得分:2)

Pure Bash:

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

答案 2 :(得分:0)

Perl解决方案:

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

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

答案 3 :(得分: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