如何将变量分配给AWK中的另一个变量,为什么这段代码不起作用?

时间:2013-06-04 09:42:39

标签: bash awk

这是代码。我只是想用随机值打印另一列。

value=$RANDOM

awk -v numColumns=$numColumns -v value=$value '{
if ($1 !~ /\#/ && $1 !~ /^$/) 
{       
                 $(NF+1) = "$value"
                 print $0
}
}' $infile > $outfile

代码在它添加的最后一列中打印$ value,而不是打印随机数。 这是bashscript中的ak脚本。该文件是filename.bsh,如果相关的话。

2 个答案:

答案 0 :(得分:2)

<强>已更新

不需要IMHO传递随机值。它可以在内生成。

awk 'BEGIN{srand();R=int(rand()*32768)}{print $0, R}' <<XXX
one
One Two
ONE TWO THR
XXX

输出是:

one 31122
One Two 31122
ONE TWO THR 31122

如果您需要浮点随机值([0, 1)),则可以使用:

awk 'BEGIN{srand();R=rand()}{print $0, R}'

输出:

one 0.878804
One Two 0.878804
ONE TWO THR 0.878804

如果您需要更多十进制数字,可以使用

awk 'BEGIN{printf("%.16f", rand())}'

awk 'BEGIN{OFMT="%.16f";print rand()}'

也许你想为每一行添加不同的随机数:

awk 'BEGIN{srand()}{print $0, int(rand()*32768)}' <<XXX
one
One Two
ONE TWO THR
XXX

输出:

one 29633
One Two 26052
ONE TWO THR 23050

答案 1 :(得分:1)

尝试进行以下更改:

$(NF+1) = "$value"  -> $(NF+1) = value

修改

供参考:

kent$  val=$RANDOM

kent$  echo $val
26521

kent$  echo "a b c d"|awk -v value=$val '{$(NF+1)=value;print $0}'
a b c d 26521