【问题标题】:Show real-time progress with GNU Parallel and Stata使用 GNU Parallel 和 Stata 显示实时进度
【发布时间】:2018-12-07 20:09:52
【问题描述】:

我正在使用 GNU 并行为许多不同的数据集运行 Stata do 文件。

我有一个包含以下内容的 Bash 脚本:

parallel -a arguments.txt -j 3 stata -b do $dofileloc {}

由于do 文件对于每个数据集都有几个不同的部分,我希望“实时”显示进度(例如,在 Stata do 的一部分之后显示“为XYZ 加载的数据”数据集的文件完成等)。

所以我想将消息从 Stata 重定向到命令行,但我在执行此操作时遇到了麻烦。

如果我不在批处理模式下运行 Stata,我可以看到所有内容,这有点乱。我曾尝试在 Stata 中使用 shell 命令,但我似乎无法找出正确的组合。

如果有任何提示,我将不胜感激。

【问题讨论】:

  • 据我所知,您无法做到这一点——至少实时无法做到。为什么不为每个数据集将 do 文件拆分成更小的文件?然后,您可以在每个 do 文件结束后简单地在 bash 脚本中包含一条消息。
  • 可能在最后添加一个过滤器? parallel ... | grep "loaded"
  • 感谢您的帮助和对延迟的歉意,我有很多事情要做,并且在回复之前试图在这个问题上取得一些进展。不幸的是,过滤器不起作用。我不想为每个数据集拆分 do 文件的原因是因为它是所有数据集的相同代码(其中有 30 多个),这就是我首先并行化该过程的原因。我怀疑 Stata 的批处理模式可能与这个问题有关——这可能是为什么无法做到这一点的原因。再次感谢!

标签: bash stata gnu-parallel


【解决方案1】:

这是你想要的吗?

parallel --tag --linebuffer -a arguments.txt -j 3 stata -b do $dofileloc {}

【讨论】:

  • 感谢您的建议。如果我不使用批处理模式,这确实会显示 Stata 的输出,但我仍然不确定如何只显示某些输出。
  • @Paprika 在不使用 GNU Parallel 的情况下,你用什么来做到这一点?
  • @OleTange 我的理解是,她只想显示一条特定消息以确认数据集已加载,而不是真正引导整个输出。就个人而言,我认为这是不可能的。我记得我过去曾尝试做类似的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多