/dev/urandomのストリームを使用して指定された数の行でファイルを埋めるには?

/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

これでフローを制御したいので、名前付きパイプを作成し、その中にフローを指定します。次に、1行当たりの文字数とファイルの行数を制御したい無駄な希望で、ddコマンドを使用して名前付きパイプに接続しました。

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

fooファイルは実際には50バイトの0と1で埋められていますが、行数はまだ0です。

この問題をどのように解決しますか?ファイル内の各文字数に改行文字を挿入する必要があるようですが、その場合はどうすればよいかわかりません。

ベストアンサー1

どうですか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を使用すると可能だと思いましたが、明らかにそうではありませんでした... ;)

おすすめ記事