gpt4 book ai didi

在不读取整个文件的情况下以相反的顺序 grep

转载 作者:行者123 更新时间:2023-12-04 02:40:32 30 4
gpt4 key购买 nike

我有一个可能非常大(10+ GB)的日志文件。我想找到表达式的最后一次出现。是否可以使用标准的 posix 命令来做到这一点?

以下是一些不太合适的类似问题的潜在答案。

  • 使用 tail -n <x> <file> | grep -m 1 <expression> : 不知道那个表情是多远的,所以不知道是什么<x>将是。它可能是几个 GB 之前,所以你会拖尾整个文件。我想你可以循环和递增 <x>直到它被找到,但是你会反复阅读文件的最后一部分。
  • 使用 tac <file> | grep -m 1 <expression> : tac 读取整个源文件。一旦找到某些输出,是否可以将某些内容链接到 sigkill tac 上?那会有效率吗?
  • 使用 awk/sed:我很确定它们总是从文件的顶部开始(虽然我可能错了,我的 sed-fu 不强)。
  • “没有加速,所以为什么要麻烦”:我认为这是不正确的,因为文件系统可以在不阅读整个文件的情况下寻找文件的末尾。查找每条新行需要一些试验和错误/缓冲,但与读取(例如)从未使用过的 10 GB 相比,这不会减慢速度。
  • 编写一个 python/perl 脚本来做到这一点:如果没有人能提出更好的建议,这是我的后备。我宁愿坚持可以直接通过命令行完成的事情,因为我直接通过 ssh 执行它,而且我也不想上传脚本文件。在 python 中使用 mmap 的 rfind() ,我想我们可以用几行来完成,前提是 find 的表达式是静态的(不幸的是,我的不是)。正则表达式需要更多的工作,比如 this .

  • 如果有帮助,该表达式将 anchor 定在一行的开头,例如: "^foo \d+$" .

    最佳答案

    无论您编写什么脚本,几乎肯定会比以下脚本慢:

    tac file | grep -m 1 '^foo [0-9][0-9]*$'

    关于在不读取整个文件的情况下以相反的顺序 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421179/

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