GNU/Linux >> Linux の 問題 >  >> Linux

指定された行数で/dev/ urandomからのストリームでファイルを埋める方法は?

ユーザー定義の行数と1行あたりの文字数を使用して、ランダムな0と1のシーケンスでファイルを埋めようとしています。

最初のステップは、0と1のランダムストリームを取得することです:

cat /dev/urandom | tr -dc 01

次に、このストリームでファイルを埋めようとしました(そして、ctrl + cで埋めるプロセスを終了します)

cat /dev/urandom | tr -dc 01 > foo

そのように作成されたfooファイルの行数を数えると、0行になります。

cat foo | wc -l
0

ここでストリームを制御しようとしたので、名前付きパイプを作成してストリームをそのパイプに向けました。次に、ddコマンドを使用して名前付きパイプに接続しましたが、この方法で1行あたりの文字数とファイル内の行数を制御することはできませんでした。

makefifo namedpipe
cat /dev/urandom | tr -dc 01 > namedpipe
dd if=namedpipe of=foo bs=10 count=5

fooファイルは確かに0と1の50バイトでいっぱいになりましたが、行数はまだ0でした。

どうすれば解決できますか。ファイルに各文字数の改行を挿入する必要があると思いますが、そうであれば、方法がわかりません。

承認された回答:

foldはどうですか ?これはcoreutilsの一部です…

$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5
001010000111110001100101101101
000101110011011100100101111000
111010101011100101010110111001
111011000000000101111110110100
110011010111001110011010100011

または、それが利用できない場合は、awkのフレーバーがあります :

$ tr -dc 01 < /dev/urandom | awk $0=RT RS=.{,30} | head -n 5
000100010010001110100110100111
101010010100100110111010001110
100011100101001010111101001111
010010100111100101101100010100
001101100000101001111011011000

または、ループで何かを行うこともできます…

$ for line in $(seq 1 5)
> do
>     echo $(tr -dc 01 < /dev/urandom | head -c 30)
> done
100101100111011110010010100000
000000010000010010110111101011
010000111110010010000000010100
001110110001111011101011001001
001010111011000111110001100110

他の方法があると確信しています…カスタム形式のhexdumpで可能だと思いましたが、明らかにそうではありません…😉


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. / dev/randomと/dev/ urandomをいつ使用するか?

  1. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  2. /dev/zero から /dev/null への DD ...実際に何が起こるか

  3. Linux が /dev/tty と /dev/tty0 を使用する方法

  1. Linux で /dev/random を /dev/urandom にリンクするのは間違っていますか?

  2. echo または print /dev/stdin /dev/stdout /dev/stderr

  3. /dev/tcp を使用するために < または > が必要な理由