首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用管道转换浮子流的低速,扫描,写

用管道转换浮子流的低速,扫描,写
EN

Stack Overflow用户
提问于 2013-02-06 20:01:30
回答 1查看 176关注 0票数 0

我正在尝试将一个持续的数据流(非常大)保存到一个二进制文件中。生成数据流的方法是

代码语言:javascript
复制
find . -name "(pattern)" | xargs -L1 awk '{(smth)}' | ./translater

"translator“是一个C代码,用于恢复第二个管道中的数据流。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main() {
    float buffer;
    FILE *stream;

    stream = fopen("output.bin", "wb");
    while (scanf("%f", &buffer)==1) {
        fwrite(&buffer, 1, sizeof(float), stream);
    }
    fclose(stream);
    return (0);
}

这些组合运行良好,但生成2GB二进制文件所需的时间太长(>3hr)。有什么可以改进的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 21:35:30

您正在执行awk近400万次。在我的机器上,执行awk 1000次大约需要5秒,尽管awk什么也不做。您可以在shell中这样计时:

代码语言:javascript
复制
time for ((i = 0; i < 1000; i++)); do gawk 1 < /dev/null; done

这意味着,单独处理问题的awk初始化时间将占用4000 * 5 / 60 / 60 = 5.5小时,甚至不需要做任何工作。

试一试

代码语言:javascript
复制
find . -name "(pattern)" | xargs cat | awk '{print $2}' | ./translater

只执行一个awk进程。

如果这仍然是缓慢的,尝试计时时间的每个部分的时间线本身-它需要多长时间运行find?从cat/dev/null要多长时间?运行awk多长时间

fwrite通常是缓冲的,所以,您的翻译程序,不应该是问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14737704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档