バッチデータの生成

バッチデータの生成

ほぼ10億の一意の整数レコードを生成する必要があります。私はawkを試しましたが、500万以上のレコードが生成されませんでした。私が今まで試したことは次のとおりです。

 awk -v loop=10000000000 -v range=10000000000 'BEGIN{
  srand()
  do {
    numb = 1 + int(rand() * range)
    if (!(numb in prev)) {
       print numb
       prev[numb] = 1
       count++
    }
  } while (count<loop)
}' 

ただし、599160237以上のレコードが生成されなかったため、プロセスは自動的に終了しました。

ベストアンサー1

GNU seq+を使用sortして、最初に一意の1B整数リスト(順番に)を作成してからランダムに混在させるsort -Rことができます。これはCPU効率的ではありませんが、ソート時に使用可能なメモリを最大限に使用してから一時ファイルに戻すため、メモリに依存しません。

これは数分かかります(マシンのCPU / Ram /ディスクによって異なります)。

$ seq 1000000000 > 1B.txt

$ ls -lhog 1B.txt 
-rw-rw-r-- 1   9.3G Dec 26 17:31 1B.txt

$ sort -R 1B.txt > 1B.random.txt

RAMが十分なコンピュータにアクセスできる場合は、GNUを使用できますshuf

$ shuf -i 1-1000000000 > 1B.random.txt

経験上shuf、私のコンピュータには約8GBの空きメモリと約6分のランタイムが必要です。

おすすめ記事