分页: 1 / 1

关于awk脚本的问题,求帮助(已解决)

发表于 : 2011-05-23 21:08
phf1102

代码: 全选

#!/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.。大家帮我看看是函数定义错了,还是我调用函数不正确阿?

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-23 21:20
phf1102
怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-23 21:26
lilydjwg
phf1102 写了:怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。
代码不用 code 标签太难看把人都吓跑了吧? :em05 :em05

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-23 21:32
phf1102
第2回发贴,不是很懂。 :em20

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-23 21:52
phf1102
啊,不知道怎么排版

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-23 23:03
lilydjwg
还是用 Vim 重排了下。

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

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-24 9:54
phf1102

代码: 全选

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以内不重复的随机数字才对

Re: 关于awk脚本的问题,求帮助

发表于 : 2011-05-24 11:44
phf1102
问题总算解决了。原来是没给函数指定数组