送给Shell版兄弟姐妹们的节日礼物
有好一段时间不来了,怪想大家的。
眼看快到十月一了,写了两个awk程序作为礼物送给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
}
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
程序代码:
#! /usr/bin/awk
# GAWK彩色作图程序
# 作者: dbcat
# Email: deeperbluecat@Gmail.Com
# 日期: 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=int((X_Label-X_Min)/(X_Max-X_Min)*(xlen-1) + 1)
Y_Label=int((Y_Label-Y_Min)/(Y_Max-Y_Min)*(ylen-1) + 1)
Myth[X_Label,Y_Label]=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"
}
}
寂寞烈火 回复于:2006-09-24 22:57:28
谢谢~dbcatMM的礼物~ ^_^ 也祝MM节日快乐!!!
shitou9000 回复于:2006-09-24 23:00:26
收到
insolaris 回复于:2006-09-24 23:30:12
为什么我输入这个命令 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)
我不懂
lovesaka 回复于:2006-09-25 03:16:13
怎么画心形呀?教教我:mrgreen:
dbcat 回复于:2006-09-25 08:46:23
引用:原帖由 寂寞烈火 于 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
dbcat 回复于:2006-09-25 08:50:15
引用:原帖由 lovesaka 于 2006-9-25 03:16 发表
怎么画心形呀?教教我:mrgreen:
你倒是很贪心嘛
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
产生的就是一个心^_^
dbcat 回复于:2006-09-25 09:07:45
感谢waker版主加精^_^
再多提供大家几个有趣的图形:
爱心型
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}}'
技安 回复于:2006-09-25 09:11:04
-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
dbcat 回复于:2006-09-25 09:22:47
引用:原帖由 技安 于 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
技安 回复于:2006-09-25 09:34:21
[aluns]~/shtmp>awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' | awk -f awk.awk | head
0 1
0.00999983 0.99995
0.0199987 0.9998
0.0299955 0.99955
0.0399893 0.9992
0.0499792 0.99875
0.059964 0.998201
0.0699428 0.997551
0.0799147 0.996802
0.0898785 0.995953
dbcat 回复于:2006-09-25 09:42:16
引用:原帖由 技安 于 2006-9-25 09:34 发表
[aluns]~/shtmp>awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' | awk -f awk.awk | head
0 1
0.00999983 0.99995
0.0199987 0.9998
0.0299955 0.99955
0.0399893 0.9992
0.0499792 0. ...
可能是awk 版本的问题吧,
我这里没有问题的^_^
我的环境: Gawk 3.1.4, bash 3.00.16(1)
cyaln 回复于:2006-09-25 09:48:35
8C8C~~~~~~继续学习
lovesaka 回复于:2006-09-25 10:42:38
引用:原帖由 dbcat 于 2006-9-25 08:50 发表
你倒是很贪心嘛
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 ColorPlo ...
偶对你的仰慕就如同涛涛江水.....(怕写不下己略几万字)
dbcat 回复于:2006-09-25 11:27:47
还有两个很漂亮的图形:
花蕊
awk 'BEGIN{while(u<10){print sin(u)*cos(v+u)*sin(u+v),cos(v+u)*cos(u)*sin(v+u);v=v+0.01;u=u+0.01}}' | awk -f ColorPlot.awk
剪刀
awk 'BEGIN{while(u<10){print sin(u+v)*cos(v+u)*sin(u+v),cos(v+u)*cos(u)*sin(v+u);v=v+0.01;u=u+0.01}}'| awk -f ColorPlot.awk
寂寞烈火 回复于:2006-09-25 13:56:33
终于明白了,这就是叫随心所欲的吧`
mike_chen 回复于:2006-09-25 16:41:25
就是一个顶!
boyhyc 回复于:2006-09-25 16:42:53
楼主真是弓虽!
努力学习ING
r2007 回复于:2006-09-25 21:31:53
佩服!dbMM最近少见啊,希望常来。
wayy2008 回复于:2006-09-25 21:33:12
高手啊,学习中。。。。。。
katu 回复于:2006-09-26 12:43:50
奇怪了 我要改代码才能运行
难道其他人直接可以运行么?
awk就是awp加ak 回复于:2006-09-26 16:44:56
可以,就是没颜色。我telnet的
谢谢dbcat!前天是什么节日?
Ksharp 回复于:2006-09-26 17:10:07
大牛啊,收我为徒吧~~~
poleon 回复于:2006-09-26 17:37:07
楼主是 姐姐阿 ?
收藏一下 虽然不太懂
慢慢研究 哈哈 这个好玩阿
以后可以为女朋友 送个心过去
这才是cs特色阿 哈哈
还有 我得认识 一下 美女 姐姐 @_@
只弄出来 三四个
我那个 心是空心的 555
很喜欢阿 漂亮
学习ing
可以让朋友们 放松一下 喜欢
楼主姐姐 节日快乐 喽
还有 cu的 所有 兄弟姐妹们
[ 本帖最后由 poleon 于 2006-9-26 17:58 编辑 ]
loesprite 回复于:2006-09-27 00:18:21
好帖得回,等下仔细看看~~~!!!
楼主以后要经常发点技术贴,不然俺们的技术都生疏了
[ 本帖最后由 loesprite 于 2006-9-27 08:14 编辑 ]
飞灰橙 回复于:2006-09-27 10:29:20
真牛,
好有想象力啊
这些公式是怎么推导出来的啊?
flowingtree 回复于:2006-09-27 10:57:53
收藏
filwy 回复于:2006-09-27 11:26:44
佩服
cq20081127 回复于:2006-09-27 11:56:33
看不懂看不懂,对于我这个初学者太深了~~最好解释下!!!
rain_forest 回复于:2006-09-27 12:54:44
很崇拜啊
以后:
1)不敢说自己会AWK
2)要相信Gril Programmer也可以写出Great的程序
happy2008163 回复于:2006-09-27 13:23:28
嘎嘎
xchen301 回复于:2006-09-27 16:30:03
哇哇哇,very nice~~~
dbcat MM很可爱的说~
fox_fox 回复于:2006-09-27 16:48:06
佩服,佩服
rocklv 回复于:2006-09-27 17:24:11
漂亮极了:):)
sunkez 回复于:2006-09-27 17:31:56
这个女孩,写程序这么厉害呀,羡慕!
ZealeS 回复于:2006-09-27 17:42:58
强大得一塌糊涂。。^_^
huanghaojie 回复于:2006-09-27 18:01:52
只能向往我们的LZ MM,高不可攀呀。
lrz 回复于:2006-09-27 21:28:46
引用:原帖由 katu 于 2006-9-26 12:43 发表
奇怪了 我要改代码才能运行
难道其他人直接可以运行么?
怎么改,FC5 也似有问题
awk: ColorPlot.awk:82: (FILENAME=- FNR=10000) fatal: attempt to use array `X_Label' in a scalar context
xlink 回复于:2006-09-27 23:32:15
问世间,是否此山最高?
luanqibazao 回复于:2006-09-28 10:06:08
终于搞出来了,节日快乐
awk就是awp加ak 回复于:2006-09-28 10:19:21
引用:原帖由 xlink 于 2006-9-27 23:32 发表
问世间,是否此山最高?
或者,自有高处比天高
richardhyh 回复于:2006-09-28 11:14:13
在cygwin中运行时候报错了,不知道Myth是干吗用的?请指教
$ awk -f colorcat.awk 1.txt
awk: colorcat.awk:22: (FILENAME=1.txt FNR=1) fatal: attempt to use array `Myth (from Myth)' in a scalar context
HXP111 回复于:2006-09-29 14:29:50
xiexie
soaact 回复于:2006-09-29 21:18:46
楼主姐姐真是牛人啊!
顶!
dayan_he 回复于:2006-09-30 01:30:53
挖卡卡
果然美女一个
dayan_he 回复于:2006-09-30 03:57:35
在 RHEL AS4.0 全部测试通过
lrz 回复于:2006-09-30 21:20:56
可FC5下却出错:
awk: ColorPlot.awk:82: (FILENAME=- FNR=10000) fatal: attempt to use array `X_Label' in a scalar context
想知如何解决,
新手
awk就是awp加ak 回复于:2006-10-01 01:46:22
引用:可FC5下却出错
FC不是跑魂斗罗的么?
hll 回复于:2006-10-01 23:50:32
好,收藏,感谢!祝节日快乐
mq110 回复于:2006-10-02 14:07:17
数学功底不错.^_^
okyou 回复于:2006-10-02 16:07:51
有实用价值吗?
canoon 回复于:2006-10-02 18:42:54
好啊
awk就是awp加ak 回复于:2006-10-02 19:04:17
引用:原帖由 okyou 于 2006-10-2 16:07 发表
有实用价值吗?
看你怎么用了,想拿来当砖头砌楼恐怕是不行
光明晓仙 回复于:2006-10-03 21:59:49
强人................
liqingyang 回复于:2006-10-04 20:55:34
学习
西山晴雪 回复于:2006-10-11 09:50:30
mm太强了。佩服佩服。
pqxpqx 回复于:2006-12-11 15:10:38
看来shell的功能实在是很强大!
soaact 回复于:2007-01-29 20:13:47
有哪位知道那个画心的公式是怎么出来的?我想要个类似红桃的倒过来心应该怎么整呢?
谢谢了。
net_robber 回复于:2007-01-30 12:41:04
还研究不了那么深,先把颜色搞清楚了再说,呵呵
prc 回复于:2007-01-30 13:47:13
楼主太强了,赞!!
justicezyx 回复于:2007-01-30 21:27:28
sup...
sophia_wang99 回复于:2007-04-04 17:41:09
为何我的不行啊
[wanghf2]# 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 ColorCat.awk
awk: ColorCat.awk:50: (FILENAME=- FNR=2000) fatal: attempt to use array `X_Label' in a scalar context
我的环境是:
gawk-3.1.3-10.1
bash-3.0-19.3
sophia_wang99 回复于:2007-04-04 18:03:45
哈哈,我知道了,程序一必须执行啊
谢谢~~
sendqmail 回复于:2007-04-08 23:02:07
好好玩啊!顶啊帮你
ruifox 回复于:2007-04-09 10:24:45
你太有才了!
|