shell中几个很有趣的例子(转)

shell中几个很有趣的例子(转)[@more@]有好一段时间不来了,怪想大家的。
眼看快到十月一了,写了两个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="33[1;"int(31+7*rand())
printf "%s;3m%s33[0m",Color,Myth
}
printf " "
}

程序二:
彩色作图程序,有点像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
如果你有想象力的话还可以作出很多意想不到的图形,比如:
圆盘: 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_MinY_Max=Y_Max>$2?Y_Max:$2
Y_Min=Y_MinX_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="33[1;"int(31+7*rand())
printf " %s;1m%c33[0m",color,Myth[i,j]
}
printf " "
}
}
心型:
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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617542/viewspace-959967/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10617542/viewspace-959967/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值