Linux 有没有一种方法可以将命令行输出任意分块到每个分块的x字节数中?

Linux 有没有一种方法可以将命令行输出任意分块到每个分块的x字节数中?,linux,shell,sh,file-descriptor,busybox,Linux,Shell,Sh,File Descriptor,Busybox,假设我有一个Linux命令,例如: shell\u命令>/dev/my\u io 所述shell_命令未缓冲,预计将转储大量数据,my_io是处理所述数据的文件描述符。我想做的是做一些类似于: shell_命令| awk'{printf$0}'>/dev/my_io,其中我强制执行行缓冲,因为awk是逐行执行的 但是,我不想使用对我的io的新行分隔调用来将这些海量数据分块,而是想将这些数据分块,比如说1000字节的块。有没有一种方法可以使用非常简单的命令,比如awk{printf}或类似的命令(

假设我有一个Linux命令,例如:
shell\u命令>/dev/my\u io

所述shell_命令未缓冲,预计将转储大量数据,my_io是处理所述数据的文件描述符。我想做的是做一些类似于:

shell_命令| awk'{printf$0}'>/dev/my_io
,其中我强制执行行缓冲,因为awk是逐行执行的

但是,我不想使用对我的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)
还有,有没有办法强制stdout的所有输出都被完全缓冲

我不想使用对我的io的新行分隔调用作为将这些海量数据分块的方法,而是想将这些数据分块成1000字节的块。有没有一种方法可以使用非常简单的命令(如awk{printf})来实现这一点

stdbuf

stdbuf -o1000 command | stdbuf -o1000 awk '{printf $0}' > /dev/my_io
基本上是一组通用的busybox命令

您可以在循环中使用
dd
读取1000个字符,如下所示:

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

显然这是
/dev/my_io
驱动程序中的一个bug,应该在那里修复,但是作为一种解决方法,您可以使用
dd bs=1000
一次写入1000字节的缓冲区。是的,非常感谢