Shell script to find Percentage?

Hi all,

I havea log of data.log

bear,10000,white
bear,5000,black
chicken,2000,white
chicken,4000,yellow
chicken,3000,black
lion,6000,yellow
lion,1000,white

How can we have shell script to get the percentage of each animals?

Thanks.

awk would be better suited, really...

awk -F, '{ A[$1]+=$2; T+=$2 } END { for(X in A) printf("%s,%2d\n", X, (100*(A[X]/T))+0.5); }' filename

The 0.5 is to make sure the numbers round up/down properly, so the values total 100...

Thanks, what if i have , then how you get percetage of each animal?

bear,10000,white
bear,3000,black
bear,2000,black
chicken,2000,white
chicken,4000,yellow
chicken,2000,yellow
chicken,3000,black
lion,6000,yellow
lion,1000,yellow
lion,1000,white

In what way is the program I gave you not suitable? Did you try it?

From

awk -F, '{ A[$1]+=$2; T+=$2 } END { for(X in A) printf("%s,%2d\n", X, (100*(A[X]/T))+0.5); }' filename

I got the output

lion,24
chicken,32
bear,44

I would like to have:

bear,white = (10000:(10000+3000+2000))X100%
bear,black = (3000+2000)(10000+3000+2000))X100%
....

So you want the colors and animal together, sure. But you don't actually want it to calculate it? :confused:

---------- Post updated at 04:30 PM ---------- Previous update was at 04:26 PM ----------

$ awk -F, '{ A[$1","$3]+=$2; T+=$2 } END { for(X in A) printf("%s=%2d\n", X, (100*(A[X]/T))+0.5); }' data
chicken,black=10
chicken,yellow=13
bear,black=16
lion,yellow=19
lion,white= 3
chicken,white= 6
bear,white=32

$

Should it be

bear,10000,white
bear,3000,black
bear,2000,black
chicken,2000,white
chicken,4000,yellow
chicken,2000,yellow
chicken,3000,black
lion,6000,yellow
lion,1000,yellow
lion,1000,white

The out put will be

bear,white = 64%
bear,black= 33%
chicken,white=18%
chicken,yellow= 55%
chicken,black= 27%
lion,yellow= 87%
lion,1000,white=13%

I got the output

chicken,white, 6
chicken,black, 9
chicken,yellow,18
lion,white, 3
bear,white,29
lion,yellow,21
bear,black,15
$ cat bear.awk

BEGIN { FS="," }

{
        T[$1]+=$2;
        V[$1,$3]+=$2;
        C[$1]=C[$1] "|" $3
}

END {
        for(X in T)
        {
                MAX=split(C[X], ARR, "|");
                for(N=2; N<=MAX; N++)
                {
                        printf("%s,%s=%d%%\n",
                                ARR[N], X, 100*(V[X,ARR[N]]/T[X]));
                }
        }
}

$ awk -f bear.awk data

white,chicken=22%
yellow,chicken=44%
black,chicken=33%
white,bear=66%
black,bear=33%
yellow,lion=85%
white,lion=14%

$

Thanks, I will try it