有没有办法将命令行输出任意分块为每个块的 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
假设我有一个 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