我在这里有一个小问题,我需要能够读取一个未知大小的文件,它可能是几百行或更多,日志文件一直在变化,具体取决于我检查的时间。我想要一个在 php 或 linux 中的方法,我可以从文件中读取一系列行。我不想将整个文件读入 php 内存然后删除这些行,因为文件可能比 php 允许的内存大。
我还希望它使用默认的 php 模块或默认的 linux 工具,因为它需要可移植,所以不需要安装任何东西。
编辑:
对于基于 linux 的选项,我希望能够提供多个范围,我可能需要获得几个不同范围的行读?
使用 awk:
awk 'NR>=10 && NR<=15' FILE
使用 awk(两个范围):
awk 'NR>=10 && NR<=15 || NR>=26 && NR<=28' FILE
与ed
:
echo 2,5p | ed -s FILE
有ed
和 两个范围:
echo -e "2,5p\n7,8p" | ed -s FILE
最后但同样重要的是,sed
具有两个范围的解决方案(最快的解决方案,用 测试time
):
sed -n '2,5p;7,8p' FILE
怎么样的东西
head -100 | tail -15
给你第 86-100 行
$ cat input.txt
q
w
e
r
t
y
u
i
$ sed -n 2,5p input.txt
w
e
r
t
while ($lines_read < last_line_desired) {
while ($line = fgets($filehandle, $buffersize) !== false)
if (line >= first_desired_line) {
push($interesting_lines, $line)
}
}
$lines_read++
}
打开文件句柄,选择足够大的缓冲区大小以覆盖任何预期的行长度等取决于您。
如果您正在阅读经常附加到的文件,您应该查看ftell和fseek函数以注意您在数据中的位置,并在阅读更多内容之前跳过所有旧内容。