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

更新しました

ランダム値を渡す 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

float ランダム値 ( ) が必要な場合は[0, 1)、次のように使用できます。

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

出力:

one 0.878804
One Two 0.878804
ONE TWO THR 0.878804

さらに10進数が必要な場合は、使用できます

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 に答える