如何在awk命令中使用存储在变量中的数字

时间:2016-12-07 22:49:36

标签: bash awk

我试图让脚本从文件中获取随机记录。该文件总共有10条记录。 不知道为什么我现在拥有的东西不起作用。 (我有一个“等于n”)。

n=expr $RANDOM % 10 + 1 
awk 'BEGIN{RS = "%"} NR==$n' pathToFile

如果我用$n替换任何数字1-10,则没有问题。

2 个答案:

答案 0 :(得分:2)

您可以在awk内生成随机数,以避免引用挑战:

awk -v min=1 -v max=10 'BEGIN{srand() 
     n=int(min+rand()*(max-min+1))
}
#... the rest of the awk ...'

如果要打印随机记录:

awk -v min=1 -v max=10 'BEGIN{srand() 
n=int(min+rand()*(max-min+1))
} 
NR==n {print; exit}' file

或者,您可以在awk命令行上生成和分配:

$ awk -v n=$(expr $RANDOM % 10 + 1) 'BEGIN{ print n }'

或者,

$ echo $n
7
$ awk -v n="$n" 'BEGIN{ print n }'
7

答案 1 :(得分:0)

这应该按你想要的方式工作:

awk 'BEGIN{RS = "%"} NR=="'"$n"'"' /folder/file

请注意,与代码的唯一区别在于变量周围的额外"'" "'"