当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于awk脚本的问题,求帮助(已解决)
帖子发表于 : 2011-05-23 21:08 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
代码:
#!/bin/sh
awk -v NUM=$1 -v TOPNUM=$2 '
BEGIN{
function sort(ARRAY,ELEMENTS,temp,i,j) {
       for(i=2;i<=ELEMENTS;++i) {
                for(j=i;(j-1) in ARRAY && ARRAY[j-1] > ARRAY[j];--j) {
                temp=ARRAY[j]
                ARRAY[j]=ARRAY[j-1]
                ARRAY[j-1]=temp
                }
        }
}
                if(NUM <= 0)
                NUM=6
                if(TOPNUM <= 0)
                TOPNUM=30
                srand()
printf ("pick %d of %d\n",NUM,TOPNUM)
        for(x=1;x<=NUM;x++){
        do {
                select = 1 + int(rand() * TOPNUM)
        } while (select in pick)
        pick[select]=select
                }       
sort(pick, NUM)
for(j=1;j<NUM;++j)
        printf("%d ",pick[j])
        printf("\n")
}'


这是一个随机选号的脚本,现在的问题是,我自定义了一个函数用来给数字排序,但是运行脚本出错。提示awk: 命令行:2: function sort(ARRAY,ELEMENTS,temp,i,j) {
awk: 命令行:2: ^ syntax error
语法错误,我把自定义函数放在BEGIN外面,不报错,但是运行脚本没有随机选号的功能里,都是0.。大家帮我看看是函数定义错了,还是我调用函数不正确阿?


最后由 phf1102 编辑于 2011-05-24 16:18,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-23 21:20 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-23 21:26 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
phf1102 写道:
怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。


代码不用 code 标签太难看把人都吓跑了吧? :em05 :em05


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-23 21:32 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
第2回发贴,不是很懂。 :em20


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-23 21:52 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
啊,不知道怎么排版


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-23 23:03 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
还是用 Vim 重排了下。

awk 的 function 不能写在 BEGIN 里边。你写到最开头就可以了。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-24 9:54 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
代码:
function sort(ARRAY,ELEMENTS,temp,i,j) {
       for(i=2;i<=ELEMENTS;++i) {
                for(j=i;(j-1) in ARRAY && ARRAY[j-1] > ARRAY[j];--j) {
                temp=ARRAY[j]
                ARRAY[j]=ARRAY[j-1]
                ARRAY[j-1]=temp
                }
        }
return
}

我把函数放在BEGIN外面,在调用的时候虽然不报错,但是循环出来的数字都是0,或者是小于NUM变量的值。。这个不应该阿。
默认执行脚本应该打印6个30以内不重复的随机数字才对


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 关于awk脚本的问题,求帮助
帖子发表于 : 2011-05-24 11:44 
头像

注册: 2011-05-14 15:53
帖子: 37
送出感谢: 0 次
接收感谢: 0 次
问题总算解决了。原来是没给函数指定数组


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Exabot [Bot] 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译