Awk - это не Bash, это дискретный язык программирования.Вы не можете вызывать функции bash из awk, ну, во всяком случае, не так.Вместо этого используйте то, что awk имеет , чтобы предложить вам:
awk -v seed=$RANDOM ' # seed from the shell as opposed to time based
BEGIN{
cnt=0
srand(seed) # seed used with srand
while(cnt<5){
print int(rand()*101) # and get a random
cnt++
}
}'
98
0
84
100
54
Обновление :
Поскольку сейчас суббота, и у меня нет ничего лучшеЯ начал играть с созданием и экспортом функции в bash, извлекая ее из ENVIRON[]
в GNU awk и вызывая bash с определением функции и обращаясь к ней:
Создайте функцию и export
ее:
$ function randnum() { num=$(($RANDOM%$1)); echo $num; }
$ export -f randnum
Проверьте это:
$ randnum 101
1
The awk:
$ awk -v fun=randnum -v val=101 '
BEGIN {
if(fun=="" || val=="") # require values
exit # or die
bash_func="function " fun ENVIRON["BASH_FUNC_" fun "%%"] # function from ENVIRON
# print bash_func # DEBUG
cmd="bash -c \047" bash_func";" fun " " val "\47" # form bash call
# print cmd # DEBUG
ret=((cmd | getline line)>0?line:-1) # call it
print ret # output
}'
2