1

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

value=$RANDOM

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

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

4

2 回答 2

2

更新

恕我直言,不需要传递随机值。它可以在内部生成。

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
于 2013-06-04T10:02:22.263 回答
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
于 2013-06-04T09:46:56.077 回答