Linux 有没有一种方法可以将命令行输出任意分块到每个分块的x字节数中?
假设我有一个Linux命令,例如: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}或类似的命令(
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字节的缓冲区。是的,非常感谢