If you need output order try this
$ cat file
a1 1 1 2 2
a2 2 5 3 7
a2 2 3 3 8
a3 1 4 6 1
a3 1 7 9 4
a3 1 2 4 2
Awk Code:
$ cat tester
awk 'FNR==NR{
U[$1]
for(i=2;i<=NF;i++)
A[$1,i]+=$i
next
}
($1 in U){
for(i=1;i<=NF;i++)
s = s ? s OFS A[$1,i] : A[$1,i]
print $1,s
delete U[$1]
s = ""
}' OFS='\t' file{,}
Resulting
$ bash tester
a1 1 1 2 2
a2 4 8 6 15
a3 3 13 19 7
If you want to try this on Solaris/SunOS system, change awkto /usr/xpg4/bin/awk, /usr/xpg6/bin/awkornawk
- change -
, , .
$ awk 'FNR==NR{U[$1];for(i=2;i<=NF;i++)A[$1,i]+=$i;next}($1 in U){for(i=1;i<=NF;i++)s = s ? s OFS A[$1,i] : A[$1,i];print $1,s;delete U[$1];s = ""}' OFS='\t' file{,}
a1 1 1 2 2
a2 4 8 6 15
a3 3 13 19 7