2016-10-19 8 views
1

乱数を使用してXMLを生成するためのbashスクリプトを作成しています。私はタグを埋めるために使用する300,000行以上のtxtファイルを持っています。 最大50,000の変数がありますので、ランダムなデータを作成するには300,000から選択するだけですが、毎回重複しています。 私は50,000の一意の変数を持つことを好みます。重複のないファイルからランダムな行を読み取る

randomline=$(shuf -n 1 random.txt) 

重複を防ぐ方法はあります:

は私がTXTファイルからランダムに行を取得するには、コードのこの部分を使用できますか?

ありがとうございます!

+0

私は 'shuf'が繰り返しなしで乱数を作ると思った。 'sort -R'を使うこともできます。 – fedorqui

+1

おそらく 'sort -uR random.txtの結果を保存する|スクリプト内の配列内に「head -50000」を挿入するか、ファイルに保存して、ファイルを行単位で読み込みます。 – Sundeep

答えて

1

問題は、n行を取得するには、shufをn回入力し、常に1行目を選択します。したがって、同じ行を複数回取得する可能性があります。

ファイルに重複した行が含まれていないとします。一度shufして、結果を一時ファイルやメモリに保存することができます。カウンタを設定すると、ランダムな線を選択するたびに線数==カウンタ値の行が読み込まれます。その後カウンターを増やしてください。したがって、あなたは一意のランダムな線を持っています。

(あなたがメモリ内SHUF結果を保存する場合は、あなたが、それはつまり、スタックとして動作させる読んで(ポップ)の行を削除することができます)あなたのソリューションの

+0

aaahそれです。したがって、おそらく 'shuf -n 50000'で、その出力から一つ一つを選ぶべきです。 – fedorqui

0

感謝。それは私を軌道に戻した。 私はそれをこのように実装:私は今、それをテストしていて、今まで私は、重複を経験しなかっまし

randomline=$(sed "${i}q;d" random.dat) 

:!

read "number of lines" number 
sort -uR ~/Data/random.txt | head -$number > random.dat 

とのために...ループ、次の中を;-)

関連する問題