【转帖】极牛的shell脚本
lurz
|
1#
lurz 发表于 2006-09-27 21:25
【转帖】极牛的shell脚本
复制内容到剪贴板
代码:程序一:彩色显示文件程序,每个字符的颜色都不一样,随机变化,让你看花眼睛^_^: 程序代码: #! /usr/bin/awk # Write by dbcat # EMail:deeperbluecat@Gmail.com # run : awk -f ColorCat.awk YourFile BEGIN{ srand() } { split($0,Myth,"") ColorPrint(Myth,length($0)) } function ColorPrint(Myth,xlen) { for(i=1;i<=xlen;i++) { Color="\033[1;"int(31+7*rand()) printf "%s;3m%s\033[0m",Color,Myth[i] } printf "\n" } 程序二: 彩色作图程序,有点像Gnuplot,可以作出圆形,正弦图,抛物线等等。 例如: 圆: awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' | awk -f ColorPlot.awk 正弦线: awk 'BEGIN{while(k<10){print sin(k),k;k=k+0.01}}' | awk -f ColorPlot.awk 抛物线: awk 'BEGIN{k=-10;while(k<10){print k^2,k;k=k+0.01}}' | awk -f ColorPlot.awk 直线: paste <(seq 1 0.01 10) <(seq 1 0.01 10) | awk -f ColorPlot.awk 如果你有想象力的话还可以作出很多意想不到的图形,比如: 圆盘: awk 'BEGIN{while(k<100){print sin(k),rand()*cos(k);k=k+0.01}}' |awk -f ColorPlot.awk 花圈: awk 'BEGIN{srand() while(k++<20000){ x=2-3*rand() y=2-4*rand() if(x^2+y^2>0.6&&x^2+y^2<1||x^2+y^2<0.3&&x^2+y^2>0.1) print x,y } }' | awk -f ColorPlot.awk 菱圈: awk 'BEGIN{srand() while(k++<20000){ x=1-2*rand() y=1-2*rand() if(x+y<=1&&x-y<=1&&-x+y<=1&&-x-y<=1&&x^2+y^2>=1/2) print x,y } }' | awk -f ColorPlot.awk 爱心型 awk 'BEGIN{while(u<20){print sin(u)*sin(v),rand()*cos(u)*sin(v+u);v=v+0.01;u=u+0.01}}' 绳结 awk 'BEGIN{while(u<10){print sin(u+v)*sin(v),cos(u+v)*sin(v);v=v+0.01;u=u+0.01}}' 蝴蝶 awk 'BEGIN{while(u<10){print sin(u+v)*sin(v),cos(u)*sin(v);v=v+0.01;u=u+0.01}}' 花瓣 awk 'BEGIN{while(u<10){print sin(u+w)*cos(v)*sin(w+u),sin(u)*sin(v+u)*sin(w);v=v+0.01;u=u+0.01;w=w+0.01}}' 蝙蝠 awk 'BEGIN{while(u<10){print sin(u+w)*cos(v+w)*sin(w+u),sin(u)*sin(v+u)*sin(w);v=v+0.01;u=u+0.01;w=w+0.01}}' 螺旋 awk 'BEGIN{while(w<20){print sin(w)*w,cos(w)*w;w=w+0.01}}' 程序代码: #! /usr/bin/awk # GAWK彩色作图程序 # 作者: dbcat # Email: [email="deeperbluecat@Gmail.Com"]deeperbluecat@Gmail.Com[/email] # 日期: 2006-9-25 # 测试环境: Gawk 3.1.4, bash 3.00.16(1), SUSE 9.3 # 运行方法: awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' >datafile # awk -f ColorPlot.awk datafile BEGIN{ srand() xlen=35 ylen=35 InitGraph(Myth,xlen,ylen) } { X_Max=X_Max>$1?X_Max:$1 X_Min=X_Min<$1?X_Min:$1 Y_Max=Y_Max>$2?Y_Max:$2 Y_Min=Y_Min<$2?Y_Min:$2 X_Label[NR]=$1 Y_Label[NR]=$2 } END{ CreateGraph(Myth,NR) PrintGraph(Myth) } function InitGraph(Myth,xlen,ylen,i,j) { for(i=1;i<=xlen;i++) for(j=1;j<=ylen;j++) Myth[i,j]=" " } function CreateGraph(Myth,Len,i) { for(i=1;i<=Len;i++) { X_Label[i]=int((X_Label[i]-X_Min)/(X_Max-X_Min)*(xlen-1) + 1) Y_Label[i]=int((Y_Label[i]-Y_Min)/(Y_Max-Y_Min)*(ylen-1) + 1) Myth[X_Label[i],Y_Label[i]]=int(40+60*rand()) } } function PrintGraph(Myth,i,j) { for(i=1;i<=xlen;i++) { for(j=1;j<=ylen;j++) { color="\033[1;"int(31+7*rand()) printf " %s;1m%c\033[0m",color,Myth[i,j] } printf "\n" } } 可惜我的FC5运行不了 |