세 번째 행마다 행 추가

세 번째 행마다 행 추가

이런 문서가 있어요

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개 행마다 첫 번째 열은 항상 동일하므로 배열을 만들고 행 수가 3이 될 때까지 $2를 추가하고 인쇄하시겠습니까? 이렇지 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}'

관련 정보