2016-05-18 4 views
1

stdinを通してストリーミングされているすべての行の一部を無作為に(たとえば0.001)保持します。それを行うLinuxコマンドがありますか?stdinからサブサンプルするLinuxコマンド

私はいつも均一な乱数を生成するためにPythonスクリプトを書くことができ、それが< = 0.001の行を保持するかどうかに基づいています。しかし、私は自分のスクリプトを書くことを避けたいと思っていて、Linuxでネイティブコマンドを探していました。

+0

私はあなた自身で書く必要があると思います... –

+0

本当に?これは、ネイティブのLinuxコマンドを保証するのに十分役に立つケースのようです。 awk/sed/etcを含む厄介な表現でさえそうです。 – Nik

+0

あなたは正しいです、coreutilsから 'shuf'がトリックをすることができるかもしれません。これは行をシャッフルすることができ、最大で 'n '個のエントリを要求することができます。 –

答えて

4

十分なネイティブですか?

cat input | awk 'rand() <= 0.001' 

EDIT:それは、各第二の線の異なるセットを返すようにするには:

cat input | awk 'BEGIN{srand();} rand() <= 0.001' 
+0

それは私が探していたものです。 – Nik

+0

ランダムにするにはどうしたらいいですか?異なった走りが私に同じ行を与える。 – Nik

+1

乱数ジェネレータを初期化する必要があります。私の編集を参照してください。 – gudok

1

ほとんどのLinuxディストリビューションでもRedhat-上BSD games(Debianベースのディストリビューションのパッケージbsdgamesbsd-gamesの分布が含まれますベースの分布)。そのパッケージをインストールすると、あなたは単に正確に何をしたいんrandomフィルタを、使用することができます。

cat input | random 100 

は、平均して、すべての100番目の行を印刷します。

+0

これは、*すべてのLinuxディストリビューションにこのコマンド。したがって、受け入れられた答えとして印を付けるのではなく、これを通知することに感謝します。 – Nik

関連する問題