Help with sum total number of record and total number of record problem asking

Input file

SFSQW	5192.56	
HNRNPK	611.486	
QEQW	1202.15	
ASDR	568.627	
QWET	6382.11	
SFSQW	4386.3	
HNRNPK	100
SFSQW	500

Desired output file

SFSQW	10078.86	3
QWET	6382.11	1	
QEQW	1202.15	1
HNRNPK	711.49	2
ASDR	568.63	1

The way I tried:

awk '{a[$1]+=$2}END{for (i in a){printf "%s\t%.2f\n",i,a}}' input_file.txt  | sort -nrk2 > tmp.txt
awk '{print $1}' tmp.txt | sort | uniq -c | awk '{print $2"\t"$1}' > tmp2.txt
perl -e ' $col1=0; $col2=0; ($f1,$f2)=@ARGV; open(F2,$f2); while (<F2>) { s/\r?\n//; @F=split /\t/, $_; $line2{$F[$col2]} .= "$_\n" }; $count2 = $.; open(F1,$f1); while (<F1>) { s/\r?\n//; @F=split /\t/, $_; $x = $line2{$F[$col1]}; if ($x) { $num_changes = ($x =~ s/^/$_\t/gm); print $x; $merged += $num_changes } } '  tmp.txt tmp3.txt | awk '{print $1"\t"$2"\t"$4}' > desired_output.txt
SFSQW	10078.86	3
QWET	6382.11	1
QEQW	1202.15	1
HNRNPK	711.49	2
ASDR	568.63	1

Try this:

awk '{a[$1]+=$2;b[$1]++}END{for(i in a)print i, a, b}' file
1 Like

As per desired output.. with sum sorted in descending order.

perl -ane '$x{$F[0]}+=$F[1];$y{$F[0]}++; END{%x=reverse %x;print "$x{$_} $_ $y{$x{$_}}\n" for(reverse sort{$a<=>$b} keys %x)}' inputfile
1 Like