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

Bash 如何在awk命令中使用存储在变量中的数字,bash,awk,Bash,Awk,我试图让脚本从文件中随机抓取一条记录。该文件共有10条记录。 我不知道为什么我现在拥有的东西不起作用。 (我有``关于n等于什么) 如果我用$n替换任何数字1-10,则没有问题。这应该按照您想要的方式工作: awk 'BEGIN{RS = "%"} NR=="'"$n"'"' /folder/file 请注意,与代码的唯一区别是变量周围有额外的“”“”。这应该按照您想要的方式工作: awk 'BEGIN{RS = "%"} NR=="'"$n"'"' /folder/file 请注意,与代码

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


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

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

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

请注意,与代码的唯一区别是变量周围有额外的
“”“”

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

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

请注意,与代码的唯一区别是变量周围额外的
“”“”

您可以在
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 }'
或者


您可以在
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 }'
或者

使用
n=$(随机%10+1))
expr
对于POSIX中的算术来说大部分都是过时的。使用
n=$(随机%10+1))
expr
对于POSIX中的算术来说大部分都是过时的。