我有一个非常大的文件,5GB的csv文件,我想使用PHP exec方法显示给用户。
我尝试使用linux命令读取某些行号(第21行到第30行)而不是所有行:
mycprogram largefile.csv | sed -n "21,30p;30q"
终端将在输入命令后立即返回确切的行数。但是,当我在php exec中使用类似的命令时,它将等待第一部分(mycprogram largefile.csv
)完全加载到内存中(这需要很长时间)才能进入sed
以获取该行我想要的号码。 php代码类似于:
$cmd = "mycprogram largefile.csv | sed -n '21,30p;30q'";
exec($cmd, $output);
任何想法,我都可以通过使用PHP方法从终端获得我的输出,而无需等待mycprogram
完全加载?
由于 如何
答案 0 :(得分:0)
命令mycprogram
是否在largefile.csv
上逐行转换?如果是这种情况,请转到
$cmd = "sed -n '21,30p;30q' largefile.csv > temp; mycprogram temp" ;
答案 1 :(得分:0)
在sed上使用-u
或--unbuffered
选项作为流流处理,默认情况下,逐行加载所有文件,强制完整加载/处理整个先前的输入。