如何使用来自 /dev/urandom 的流填充文件并指定行数?

Abd*_*red 5 pipe dd shell-script text-processing random

我正在尝试使用用户定义的行数和每行字符数的随机 0 和 1 序列填充文件。

第一步是获取0和1的随机流:

cat /dev/urandom | tr -dc 01
Run Code Online (Sandbox Code Playgroud)

然后我尝试用这个流填充一个文件(并通过 ctrl+c 结束填充过程)

cat /dev/urandom | tr -dc 01 > foo
Run Code Online (Sandbox Code Playgroud)

当我计算这样创建的 foo 文件的行数时,我得到 0 行。

cat foo | wc -l
0
Run Code Online (Sandbox Code Playgroud)

现在我试图控制流,所以我创建了一个命名管道并将流引导到其中。然后我用 dd 命令连接到命名管道,希望以这种方式控制文件中每行的字符数和行数。

makefifo namedpipe
cat /dev/urandom | tr -dc 01 > namedpipe
dd if=namedpipe of=foo bs=10 count=5
Run Code Online (Sandbox Code Playgroud)

foo 文件确实填充了 0 和 1 的 50 个字节,但行数仍然为 0。

我该如何解决它,我想也许我必须在文件中插入一个换行符,但如果是这样,我不知道如何。

fro*_*utz 9

怎么样fold?它是 coreutils 的一部分...

$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5
001010000111110001100101101101
000101110011011100100101111000
111010101011100101010110111001
111011000000000101111110110100
110011010111001110011010100011
Run Code Online (Sandbox Code Playgroud)

或者,如果这不可用,请提供以下风味awk

$ tr -dc 01 < /dev/urandom | awk \$0=RT RS=.\{,30} | head -n 5
000100010010001110100110100111
101010010100100110111010001110
100011100101001010111101001111
010010100111100101101100010100
001101100000101001111011011000
Run Code Online (Sandbox Code Playgroud)

或者你可以用循环做一些事情......

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

我确定还有其他方法......我想也许带有自定义格式的 hexdump 可以做到,但显然不是......;)