我有这样的文件
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 列中每个唯一值的总数
使用 awk:
awk '{s[$1] += $2} END{ for (x in s) print x, s[x] }' input
纯重击:
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
Perl 解决方案:
perl -lane '$s{$F[0]} += $F[1] }{ print "$_ $s{$_}" for keys %s' INPUT
请注意,输出与您提供的不同。
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