2

我在这里有一个小问题,我需要能够读取一个未知大小的文件,它可能是几百行或更多,日志文件一直在变化,具体取决于我检查的时间。我想要一个在 php 或 linux 中的方法,我可以从文件中读取一系列行。我不想将整个文件读入 php 内存然后删除这些行,因为文件可能比 php 允许的内存大。

我还希望它使用默认的 php 模块或默认的 linux 工具,因为它需要可移植,所以不需要安装任何东西。

编辑:

对于基于 linux 的选项,我希望能够提供多个范围,我可能需要获得几个不同范围的行读?

4

4 回答 4

4

使用 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
于 2012-10-01T02:48:29.220 回答
1

怎么样的东西

head -100 | tail -15

给你第 86-100 行

于 2012-10-01T02:54:01.817 回答
0
$ cat input.txt
q
w
e
r
t
y
u
i
$ sed -n 2,5p input.txt
w
e
r
t
于 2012-10-01T02:46:22.253 回答
0
while ($lines_read < last_line_desired) {
  while ($line = fgets($filehandle, $buffersize) !== false)
    if (line >= first_desired_line) {
      push($interesting_lines, $line)
    }
  }
  $lines_read++
}

打开文件句柄,选择足够大的缓冲区大小以覆盖任何预期的行长度等取决于您。

如果您正在阅读经常附加到的文件,您应该查看ftellfseek函数以注意您在数据中的位置,并在阅读更多内容之前跳过所有旧内容。

于 2012-10-01T03:06:09.347 回答