有没有办法将命令行输出任意分块为每个块的 x 个字节数?

Is there a way to arbitrarily chunk command line output into x amount of bytes per chunk?

假设我有一个 Linux 命令,例如: shell_command > /dev/my_io

并表示 shell_command 是无缓冲的,预计会转储大量数据,而 my_io 是处理所述数据的文件描述符。我想要做的是:

shell_command | awk '{printf [=12=]}' > /dev/my_io ,我强制行缓冲,因为 awk 逐行通过。

但是,我不想使用对 my_io 的换行分隔调用来分块这种海量数据,而是想将这些数据分块为 1000 字节的块。有没有一种方法可以使用非常简单的命令来做到这一点,例如 awk {printf} 或类似的东西(几乎是通用的 busybox 命令集)?

例如,进一步说明。

    shell_command => (4000 bytes)

    shell_command (cat file.txt) | fancy_command > command_b

    # command_b yields

    chunk 1 (1000 bytes)
    chunk 2 (1000 bytes)
    chunk 3 (1000 bytes)
    chunk 4 (1000 bytes)

此外,有没有办法强制对标准输出的所有输出进行完全缓冲?

instead of using new-line delimited calls to my_io as a way of chunking up this massive data, I want to chunk this data into say 1000 byte chunks instead.Is there a way to do that using very simple commands such as awk {printf}

stdbuf.

stdbuf -o1000 command | stdbuf -o1000 awk '{printf [=10=]}' > /dev/my_io

pretty much a generic busybox set of commands

你可以用 dd 循环阅读 1000 个字符,还有:

command | while a=$(dd bs=1 count=1000 status=none) && [[ -n "$a" ]]; do printf "$a"; done