免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18982 | 回复: 62

送给Shell版兄弟姐妹们的节日礼物  关闭 [复制链接]

论坛徽章:
0
发表于 2006-09-24 22:35 |显示全部楼层


  1.                            送给Shell版兄弟姐妹们的节日礼物




  2. 有好一段时间不来了,怪想大家的。
  3. 眼看快到十月一了,写了两个awk程序作为礼物送给shell版的兄弟姐妹们,祝大家节日愉快!

  4. 注:若转载请保持程序的完整,谢谢!

  5. 程序一:
  6. 彩色显示文件程序,每个字符的颜色都不一样,随机变化,让你看花眼睛^_^:

  7. 程序代码:

  8. #! /usr/bin/awk
  9. #  Write by dbcat
  10. #  EMail:deeperbluecat@Gmail.com
  11. #  run : awk -f ColorCat.awk YourFile

  12. BEGIN{
  13.         srand()

  14. }

  15. {
  16.         split($0,Myth,"")
  17.         ColorPrint(Myth,length($0))
  18. }


  19. function ColorPrint(Myth,xlen)
  20. {
  21.    for(i=1;i<=xlen;i++)
  22.     {
  23.        Color="\033[1;"int(31+7*rand())
  24.        printf "%s;3m%s\033[0m",Color,Myth[i]
  25.     }
  26.     printf "\n"
  27. }



  28. 程序二:
  29. 彩色作图程序,有点像Gnuplot,可以作出圆形,正弦图,抛物线等等。

  30. 例如:
  31.    圆:      awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}'   |  awk -f ColorPlot.awk
  32.    正弦线:   awk 'BEGIN{while(k<10){print sin(k),k;k=k+0.01}}'        |  awk -f ColorPlot.awk
  33.    抛物线:  awk 'BEGIN{k=-10;while(k<10){print k^2,k;k=k+0.01}}'     |  awk -f ColorPlot.awk
  34.    直线:    paste <(seq 1 0.01 10)  <(seq 1 0.01 10)                 |  awk -f ColorPlot.awk


  35. 如果你有想象力的话还可以作出很多意想不到的图形,比如:

  36.    圆盘:    awk 'BEGIN{while(k<100){print sin(k),rand()*cos(k);k=k+0.01}}' |awk -f ColorPlot.awk
  37.    花圈:    awk 'BEGIN{srand()
  38.                         while(k++<20000){
  39.                            x=2-3*rand()
  40.                            y=2-4*rand()
  41.                            if(x^2+y^2>0.6&&x^2+y^2<1||x^2+y^2<0.3&&x^2+y^2>0.1)
  42.                               print x,y
  43.                            }
  44.                        }'       | awk -f ColorPlot.awk

  45.    菱圈:    awk 'BEGIN{srand()
  46.                         while(k++<20000){
  47.                            x=1-2*rand()
  48.                            y=1-2*rand()
  49.                            if(x+y<=1&&x-y<=1&&-x+y<=1&&-x-y<=1&&x^2+y^2>=1/2)
  50.                               print x,y
  51.                            }
  52.                        }'       | awk -f ColorPlot.awk




  53. 程序代码:

  54. #! /usr/bin/awk
  55. # GAWK彩色作图程序
  56. # 作者: dbcat
  57. # Email: deeperbluecat@Gmail.Com
  58. # 日期: 2006-9-25
  59. # 测试环境: Gawk 3.1.4, bash 3.00.16(1), SUSE 9.3
  60. # 运行方法: awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' >datafile
  61. #           awk -f ColorPlot.awk datafile

  62. BEGIN{
  63.         srand()
  64.         xlen=35
  65.         ylen=35
  66.         InitGraph(Myth,xlen,ylen)

  67. }


  68. {
  69.         X_Max=X_Max>$1?X_Max:$1
  70.         X_Min=X_Min<$1?X_Min:$1
  71.         Y_Max=Y_Max>$2?Y_Max:$2
  72.         Y_Min=Y_Min<$2?Y_Min:$2
  73.         X_Label[NR]=$1
  74.         Y_Label[NR]=$2

  75. }


  76. END{

  77.         CreateGraph(Myth,NR)
  78.         PrintGraph(Myth)

  79. }

  80. function InitGraph(Myth,xlen,ylen,i,j)
  81. {
  82.    for(i=1;i<=xlen;i++)
  83.      for(j=1;j<=ylen;j++)
  84.         Myth[i,j]=" "
  85. }


  86. function CreateGraph(Myth,Len,i)
  87. {

  88.        for(i=1;i<=Len;i++)
  89.           {
  90.            X_Label[i]=int((X_Label[i]-X_Min)/(X_Max-X_Min)*(xlen-1) + 1)
  91.            Y_Label[i]=int((Y_Label[i]-Y_Min)/(Y_Max-Y_Min)*(ylen-1) + 1)
  92.            Myth[X_Label[i],Y_Label[i]]=int(40+60*rand())
  93.           }

  94. }


  95. function PrintGraph(Myth,i,j)
  96. {
  97.    for(i=1;i<=xlen;i++)
  98.     {
  99.       for(j=1;j<=ylen;j++)
  100.          {
  101.           color="\033[1;"int(31+7*rand())
  102.           printf " %s;1m%c\033[0m",color,Myth[i,j]
  103.          }
  104.       printf "\n"
  105.     }
  106. }
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-09-24 22:57 |显示全部楼层
谢谢~dbcatMM的礼物~ ^_^ 也祝MM节日快乐!!!

论坛徽章:
0
发表于 2006-09-24 23:00 |显示全部楼层
收到

论坛徽章:
0
发表于 2006-09-24 23:30 |显示全部楼层

有点问题

为什么我输入这个命令 awk -f ColorCat.awk gift (gift is my awk filename)
就出现awk: fatal: can't open source file `ColorCat.awk' for reading (No such file or directory)
我不懂

论坛徽章:
0
发表于 2006-09-25 03:16 |显示全部楼层
怎么画心形呀?教教我

论坛徽章:
0
发表于 2006-09-25 08:46 |显示全部楼层
原帖由 寂寞烈火 于 2006-9-24 22:57 发表
谢谢~dbcatMM的礼物~ ^_^ 也祝MM节日快乐!!!





为什么我输入这个命令 awk -f ColorCat.awk gift (gift is my awk filename)
就出现awk: fatal: can't open source file `ColorCat.awk' for reading (No such file or directory)
我不懂


把那段AWK代码存为ColorCat.awk

论坛徽章:
0
发表于 2006-09-25 08:50 |显示全部楼层
原帖由 lovesaka 于 2006-9-25 03:16 发表
怎么画心形呀?教教我


你倒是很贪心嘛

  1. awk 'BEGIN{while(u<20){print sin(u)*sin(v),cos(u)*sin(v+u);v=v+0.01;u=u+0.01}}' | awk -f ColorPlot.awk
复制代码


产生的就是一个心^_^

截图

截图

论坛徽章:
0
发表于 2006-09-25 09:07 |显示全部楼层
感谢waker版主加精^_^

再多提供大家几个有趣的图形:



  1. 爱心型
  2.    awk 'BEGIN{while(u<20){print sin(u)*sin(v),rand()*cos(u)*sin(v+u);v=v+0.01;u=u+0.01}}'
  3. 绳结
  4.    awk 'BEGIN{while(u<10){print sin(u+v)*sin(v),cos(u+v)*sin(v);v=v+0.01;u=u+0.01}}'
  5. 蝴蝶
  6.    awk 'BEGIN{while(u<10){print sin(u+v)*sin(v),cos(u)*sin(v);v=v+0.01;u=u+0.01}}'
  7. 花瓣
  8.   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}}'
  9. 蝙蝠
  10.   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}}'
  11. 螺旋
  12.   awk 'BEGIN{while(w<20){print sin(w)*w,cos(w)*w;w=w+0.01}}'
复制代码

论坛徽章:
0
发表于 2006-09-25 09:11 |显示全部楼层
-0.439662 -0.898163
-0.448621 -0.893722
-0.457536 -0.889191
-0.466405 -0.884571
-0.475227 -0.879863
-0.484002 -0.875067
-0.492728 -0.870183
-0.501405 -0.865213
-0.510032 -0.860155
-0.518608 -0.855012
-0.527132 -0.849783
-0.535603 -0.84447
-0.544021 -0.839072

论坛徽章:
0
发表于 2006-09-25 09:22 |显示全部楼层
原帖由 技安 于 2006-9-25 09:11 发表
-0.439662 -0.898163
-0.448621 -0.893722
-0.457536 -0.889191
-0.466405 -0.884571
-0.475227 -0.879863
-0.484002 -0.875067
-0.492728 -0.870183
-0.501405 -0.865213
-0.510032 -0.860155
-0.51860 ...




这个画图程序的运行是这样的:
先产生预处理数据,如你上面给出的。主程序再利用这些数据进行描点画图。
我8楼的代码产生的是预处理数据,你需要用ColorPlot.awk(即程序二)来处理一下。
例如蝴蝶形:
awk 'BEGIN{while(u<10){print sin(u+v)*sin(v),cos(u)*sin(v);v=v+0.01;u=u+0.01}}'  | awk -f ColorPlot.awk
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP