-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpie.sh
41 lines (36 loc) · 1.15 KB
/
pie.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
# from here:
# http://xed.ch/b/2016/1217.html
# example use
# man awk | sed 's/\(.\)/\1 /g' | tr 'A-Z ' 'a-z\n' | grep [aeiou] \
# | sort | uniq -c | ./pie > awkman.svg
cat <<"EOHD"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="1000" >
<g transform="translate(120,120)">
EOHD
awk '
function rc(){r=rand()*255;g=rand()*255;b=rand()*255;}
BEGIN{srand(6);X=-90;Y=120;}
{ L[NR]=$1;S=S+$1;
rc();
printf("<rect x=\"%f\" y=\"%f\" width=\"20\" height=\"20\" fill=\"#%02x%02x%02x\" />\n",
X,Y,r,g,b);
#$1="";
printf("<text x=\"%f\" y=\"%f\">%s</text>\n",X+30,Y+15,$0);
Y+=25; }
END{srand(6);
R=100;PX=R;PY=0;
#PROCINFO["sorted_in"]="@ind_num_asc";
#for(i in L){ # <--- See: http://xed.ch/blog/2016/1219.html
for(i=1;i<=length(L);i++){
T+=L[i]/S;
A=T*6.283185307;
L[i]>S/2?B=1:B=0;
X=R*cos(A);Y=R*sin(A); rc()
printf("<path d=\"M 0 0 %.6f %.6f A 100 100 0 %d 1 %.6f %.6f z\" fill=\"#%02x%02x%02x\" />\n",
PX,PY,B,X,Y,r,g,b);
PX=X;PY=Y;
}
}' -
echo "</g></svg>"