我有很大的文本文件,范围在30MB10GB之间。如何使用Node.js计算文件中的行数?

我有这些限制:

  • 不需要将整个文件写入内存
  • 执行任务
  • 不需要子进程

    最佳答案

    不使用wc的解决方案:

    var i;
    var count = 0;
    require('fs').createReadStream(process.argv[2])
      .on('data', function(chunk) {
        for (i=0; i < chunk.length; ++i)
          if (chunk[i] == 10) count++;
      })
      .on('end', function() {
        console.log(count);
      });
    

    速度较慢,但​​您可能没有想到的那么多-140M +文件的时间为0.6秒,包括node.js加载和启动时间
    >time node countlines.js video.mp4
    619643
    
    real    0m0.614s
    user    0m0.489s
    sys 0m0.132s
    
    >time wc -l video.mp4
    619643 video.mp4
    real    0m0.133s
    user    0m0.108s
    sys 0m0.024s
    
    >wc -c video.mp4
    144681406  video.mp4
    

    10-04 16:08