找回密码
 注册
查看: 1694|回复: 2

awk高级实例 ZT

[复制链接]
发表于 2008-8-18 15:19:03 | 显示全部楼层 |阅读模式
  1. 程序一:

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



  3. 程序代码:



  4. #! /usr/bin/awk

  5. #  Write by dbcat

  6. #  EMail:deeperbluecat@Gmail.com

  7. #  run : awk -f ColorCat.awk YourFile



  8. BEGIN{

  9.         srand()



  10. }



  11. {

  12.         split($0,Myth,"")

  13.         ColorPrint(Myth,length($0))

  14. }





  15. function ColorPrint(Myth,xlen)

  16. {

  17.    for(i=1;i<=xlen;i++)

  18.     {

  19.        Color="\033[1;"int(31+7*rand())

  20.        printf "%s;3m%s\033[0m",Color,Myth[i]

  21.     }

  22.     printf "\n"

  23. }







  24. 程序二:

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



  26. 例如:

  27.    圆:      awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}'   |  awk -f ColorPlot.awk

  28.    正弦线:   awk 'BEGIN{while(k<10){print sin(k),k;k=k+0.01}}'        |  awk -f ColorPlot.awk

  29.    抛物线:  awk 'BEGIN{k=-10;while(k<10){print k^2,k;k=k+0.01}}'     |  awk -f ColorPlot.awk

  30.    直线:    paste <(seq 1 0.01 10)  <(seq 1 0.01 10)                 |  awk -f ColorPlot.awk





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



  32.    圆盘:    awk 'BEGIN{while(k<100){print sin(k),rand()*cos(k);k=k+0.01}}' |awk -f ColorPlot.awk

  33.    花圈:    awk 'BEGIN{srand()

  34.                         while(k++<20000){

  35.                            x=2-3*rand()

  36.                            y=2-4*rand()

  37.                            if(x^2+y^2>0.6&&x^2+y^2<1||x^2+y^2<0.3&&x^2+y^2>0.1)

  38.                               print x,y

  39.                            }

  40.                        }'       | awk -f ColorPlot.awk



  41.    菱圈:    awk 'BEGIN{srand()

  42.                         while(k++<20000){

  43.                            x=1-2*rand()

  44.                            y=1-2*rand()

  45.                            if(x+y<=1&&x-y<=1&&-x+y<=1&&-x-y<=1&&x^2+y^2>=1/2)

  46.                               print x,y

  47.                            }

  48.                        }'       | awk -f ColorPlot.awk









  49. 程序代码:



  50. #! /usr/bin/awk

  51. # GAWK彩色作图程序

  52. # 作者: dbcat

  53. # Email: deeperbluecat@Gmail.Com

  54. # 日期: 2006-9-25

  55. # 测试环境: Gawk 3.1.4, bash 3.00.16(1), SUSE 9.3

  56. # 运行方法: awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' >datafile

  57. #           awk -f ColorPlot.awk datafile



  58. BEGIN{

  59.         srand()

  60.         xlen=35

  61.         ylen=35

  62.         InitGraph(Myth,xlen,ylen)



  63. }





  64. {

  65.         X_Max=X_Max>$1?X_Max:$1

  66.         X_Min=X_Min<$1?X_Min:$1

  67.         Y_Max=Y_Max>$2?Y_Max:$2

  68.         Y_Min=Y_Min<$2?Y_Min:$2

  69.         X_Label[NR]=$1

  70.         Y_Label[NR]=$2



  71. }





  72. END{



  73.         CreateGraph(Myth,NR)

  74.         PrintGraph(Myth)



  75. }



  76. function InitGraph(Myth,xlen,ylen,i,j)

  77. {

  78.    for(i=1;i<=xlen;i++)

  79.      for(j=1;j<=ylen;j++)

  80.         Myth[i,j]=" "

  81. }





  82. function CreateGraph(Myth,Len,i)

  83. {



  84.        for(i=1;i<=Len;i++)

  85.           {

  86.            X_Label[i]=int((X_Label[i]-X_Min)/(X_Max-X_Min)*(xlen-1) + 1)

  87.            Y_Label[i]=int((Y_Label[i]-Y_Min)/(Y_Max-Y_Min)*(ylen-1) + 1)

  88.            Myth[X_Label[i],Y_Label[i]]=int(40+60*rand())

  89.           }



  90. }





  91. function PrintGraph(Myth,i,j)

  92. {

  93.    for(i=1;i<=xlen;i++)

  94.     {

  95.       for(j=1;j<=ylen;j++)

  96.          {

  97.           color="\033[1;"int(31+7*rand())

  98.           printf " %s;1m%c\033[0m",color,Myth[i,j]

  99.          }

  100.       printf "\n"

  101.     }

  102. }
复制代码
发表于 2008-8-18 16:00:42 | 显示全部楼层
三顺到手没?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-19 15:32:20 | 显示全部楼层
到了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2021-12-7 18:10 , Processed in 0.079889 second(s), 15 queries .

© 2021 Powered by Discuz! X3.4.

快速回复 返回顶部 返回列表