gpt4 book ai didi

PHP - 更快地执行 awk 或 fread 以读取非常大文件上的列

转载 作者:行者123 更新时间:2023-12-04 04:48:38 25 4
gpt4 key购买 nike

我有一个包含绘图数据的文件。每行共有 4 个坐标,数据文件可以超过 1 GB。比方说,我想获取数据文件中的第三列,哪种方法应该考虑好的做法并且更快?

使用执行:

exec("awk '{ print $3 }' data", $output);

使用 PHP 脚本:
$data = file("data");
$points = array();
foreach($data as $line)
$points[] = $line[2];

而且,由于服务器不允许读取大文件,我不得不使用 fread 来读取文件的几个部分。但是 fread 不够聪明,必须做一些工作才能将每个部分的最后一行组合起来。在php中读取文件列的任何建议或更好的方法?

最佳答案

这里/file是一个 3.1 GB 的大文件:

root# time awk '{ print $3 }' /file >/dev/null

real 1m42.430s
user 1m0.241s
sys 0m2.198s

好的。 awk 为 ±1.7 分钟。让我们测试 PHP(没有字段拆分,只有第三个字符):
root# time php -r '$fp = fopen("/file", "r"); while (($buf = fgets($fp)) !== false) echo $buf[2]; fclose($fp);' >/dev/null

real 4m17.322s
user 3m16.571s
sys 0m31.625s

PHP ±4.3 分钟!我不想想象如果我使用@Jack 的代码需要多长时间......

PHP 远慢于 awk .在非常大的文件上,使用 awk(由 exec() 调用)。正如您在此处看到的,PHP 在用户空间中花费了大量时间(是 awk 的三倍)。

关于PHP - 更快地执行 awk 或 fread 以读取非常大文件上的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com