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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
phf1102
帖子: 37
注册时间: 2011-05-14 15:53
送出感谢: 0
接收感谢: 0

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

#1

帖子 phf1102 » 2011-05-23 21:08

代码: 全选

#!/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 次。
头像
phf1102
帖子: 37
注册时间: 2011-05-14 15:53
送出感谢: 0
接收感谢: 0

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

#2

帖子 phf1102 » 2011-05-23 21:20

怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

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

#3

帖子 lilydjwg » 2011-05-23 21:26

phf1102 写了:怎么没人呢,问题肯定出在自定义sort函数上,但是不知道是定义的时候有问题,还是调用sort函数for循环出问题。
代码不用 code 标签太难看把人都吓跑了吧? :em05 :em05
头像
phf1102
帖子: 37
注册时间: 2011-05-14 15:53
送出感谢: 0
接收感谢: 0

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

#4

帖子 phf1102 » 2011-05-23 21:32

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

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

#5

帖子 phf1102 » 2011-05-23 21:52

啊,不知道怎么排版
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

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

#6

帖子 lilydjwg » 2011-05-23 23:03

还是用 Vim 重排了下。

awk 的 function 不能写在 BEGIN 里边。你写到最开头就可以了。
头像
phf1102
帖子: 37
注册时间: 2011-05-14 15:53
送出感谢: 0
接收感谢: 0

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

#7

帖子 phf1102 » 2011-05-24 9:54

代码: 全选

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以内不重复的随机数字才对
头像
phf1102
帖子: 37
注册时间: 2011-05-14 15:53
送出感谢: 0
接收感谢: 0

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

#8

帖子 phf1102 » 2011-05-24 11:44

问题总算解决了。原来是没给函数指定数组
回复

回到 “Shell脚本”