【问题标题】:How can I process a dynamically growing big file in Linux如何在 Linux 中处理动态增长的大文件
【发布时间】:2017-07-13 13:27:04
【问题描述】:

我的 Linux 服务器中有一个非常大的文件(目前超过 10GB),并且内容不断添加到文件末尾。

我有另一个脚本需要一次处理这个文件大约 1000 行。从这个文件中获取行并在同一个文件上操作的最佳方法是什么。

我正在考虑使用 sed 命令来删除这些行。但这是最好的方法吗?

【问题讨论】:

  • 你可能想看看这个相关的问题:stackoverflow.com/questions/42396561/…
  • @codeforester 感谢您的链接。但我不知道如何使用 shell 脚本为大文件实现此功能
  • 这正是我的观点。你最好使用更高级的语言,如 Ruby、Python 或 Perl。我过去曾用 Perl/C 解决过此类问题。 Bash 绝对不是选择。

标签: linux shell unix sed file-processing


【解决方案1】:

由于要监控的文件是纯文本文件(不是二进制文件),你可以做一个

tail -f my_big_fat_file | my_fancy_processing_script

您不会在 1000 行块中获得它,但您的处理脚本可以累积行并开始处理,直到收集到足够多的行。

【讨论】:

  • 这似乎不起作用。我得到命令立即退出
  • 此命令有两种可能立即退出(在每种情况下您都会收到一条错误消息):(1)在您调用命令时该文件尚不存在,或(2 ) 您的脚本会关闭 STDIN。我看不出这个命令是如何静默终止的。
【解决方案2】:
tail -n 1 -f growingfile.log | while read line; do
   echo $line
done

tail -n 1 -f <file> 将打印出文件中的最后一行,并将继续打印出附加到文件中的每个新行。该输出通过管道传送到while read line,它将能够处理写入文件的每一行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2021-12-13
    • 2010-11-15
    • 1970-01-01
    • 2016-11-17
    • 2018-07-22
    • 2023-03-16
    相关资源
    最近更新 更多