【问题标题】:Stream awk during file generation/ upload from user to my server在文件生成/从用户上传到我的服务器期间流 awk
【发布时间】:2013-05-07 20:19:42
【问题描述】:

我有一个 redhat 服务器,用户可以在该服务器上上传非常大的文件。文件完全上传后,我在它们上运行一个脚本来解析数据。它是一个包含 90% awk 的 bash 脚本。

有没有办法让我在下载脚本时开始 awking 脚本?排序流式 awk 以获得更实时的结果?

提前感谢您的任何帮助和建议。

【问题讨论】:

  • 你用什么工具下载?卷曲? wget?
  • 进行了重要的编辑。它不是下载。用户将这些文件上传到我的服务器。
  • 同样的问题:他们是通过什么过程上传的,你可以在那个过程中插入一个管道到 awk 吗?你告诉我们的是“我有这个黑匣子。我怎么……”
  • 检查github.com/rvoicilas/inotify-tools/wiki#wiki-info - 如果您的redhat 存在inotify - 您可以观察文件系统更改并在检测到更改时立即运行您的awk...
  • 如果您有权访问服务器代码,您可以在收到数据时将数据提供给您的脚本。这是你需要的吗?换句话说,您能告诉我们更多有关负责接收数据的流程吗?

标签: linux bash unix awk pipe


【解决方案1】:

您可以使用tail -f 来读取正在写入的文件。示例(GNU coreutils 8.21):

tail -n +0 -f --pid $SOME_PID $SOME_FILE | $YOUR_SCRIPT

-n +0 表示tail 将从文件开头开始输出。 -f 告诉tail 随着文件的增长输出新数据。 --pid 在给定进程终止后终止 tailtail 没有其他方法可以知道何时停止查看文件以获取更新。

【讨论】:

    【解决方案2】:

    你是怎么下载的?使用 wget 您可以执行以下操作

    wget -q -O- http://someurlthatdoesntexist.com | grep 'some word'
    

    所以,管道到 bash 脚本应该很容易。

    【讨论】:

    • 实际上是其他用户上传的。我可以访问该文件,但在用户上传时只能访问其中的一部分。
    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多