이런 문서가 있어요
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}'