сущеествет файл с такими записями, например
123 39 223 440
123 39 40 41
123 39 201 900
710 222 2 45
710 222 611 33
710 222 21 309на выходе надо получить, в данном случае две записи -- где первые два поля одинаковы, а третье и четвёртое просуммированы, т.е.:
123 39 223+40+201 440+41+900
710 222 2+611+21 45+33+309
суммирование по 1-му полю понятно, а по двум не допру
можно на awk,perl или shell
#!/bin/awk{
first = $1; second = $2;
if (step == 0) {
third = $3;
fourth = $4;
step ++;
} else {
third += $3;
fourth += $4;
if (step == 2) {
step = 0;
printf "%d %d %d %d\n", first, second, third, fourth;
} else
step ++;
}
}
>#!/bin/awk
>
>{
> first = $1; second = $2;
> if (step == 0) {
> third = $3;
> fourth = $4;
> step ++;
> } else {
> third += $3;
> fourth += $4;
> if (step == 2) {
> step = 0;
>
> printf "%d %d
>%d %d\n", first, second, third, fourth;
> } else
> step ++;
> }
>}
спасибо, но это я только показал как пример. записей может быть и тысяча, притом две записи с одними одинаковыми полями(1-е,2-е), ещё 120 с другим, а остальные 878 с третьими.
#more 1.txt
123 39 223 440
123 39 40 41
123 39 201 900 232
710 222 2 45 234 2345
710 222 611 33 234 23
710 222 21 309 5 234 234 234 234#cat 1.txt | perl -e 'my %hs; while(<>) {my @mass=split/\s/; my $key = (shift @mass)." ".(shift @mass); foreach my $val (@mass) {$hs{$key}+=$val;}} foreach my $val (sort keys %hs) {print "$val $hs{$val}\n";}'