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.
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?
---------- 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