每3行添加行

每3行添加行

我有一个这样的文档

1 0.2
1 0.3
1 0.1
2 0.8
2 0.5
2 0.3

如果第一列相同,我想添加行并输​​出类似这样的内容

1 0.6
2 1.6

我怎样才能用 awk 做到这一点?或者使用其他工具可能会更容易?

PD:每 3 行的第一列总是相同的,所以也许制作一个数组,添加 $2 直到行数达到 3 并打印?像这样awk 'BEGIN {x=0,n=1} {n++,x=x+$3}'但有一些条件?

答案1

我们可以构建一个“第一个值,第二个值之和”的数组,然后在读入整个文件后我们可以打印出结果

awk '{a[$1]+=$2} END { for (v in a) { print v,a[v]}}' datafile

如果您希望对输出进行排序,那么最简单的方法是通过排序进行管道传输:

awk '{a[$1]+=$2} END { for (v in a) { print v,a[v]}}' datafile | sort -n

答案2

我会这样做perl

#!/usr/bin/env perl

use strict;
use warnings 'all'; 

my %sum_of;
while ( <DATA> ) {
   my ( $key, $value ) = m/(\d+) ([\d\.]+)/; 
   $sum_of{$key} += $value;
}

print "$_ $sum_of{$_}\n" for sort keys %sum_of;


__DATA__
1 0.2
1 0.3
1 0.1
2 0.8
2 0.5
2 0.3

这给出了所需的输出。

作为单行:

perl -lne '($key, $value) = split; $sum_of{$key}+=$value; END {print "$_ $sum_of{$_}" for sort keys %sum_of}'

相关内容