微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有没有一种方法可以将命令行输出的任意块分成每个块x个字节?

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

,并且说该shell_command是未缓冲的,并且期望转储大量数据,而my_io是处理该数据的文件描述符。我想做的是这样的:

shell_command | awk '{printf $0}' > /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)

还有,有没有办法强制将stdout的所有输出完全缓冲?

解决方法

我不是使用对my_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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。