使用 xargs 连续刷新输出

使用 xargs 连续刷新输出

该函数输出下载文件的大小和传输速度,以换行符分隔。例子:

20 #<< data
3.0M #<< speed
25
1.2M

现在,事情是这样的:

output_data_func | xargs printf "Data transferred : %s\nSpeed : %s"这个命令在成功放置数据方面效果很好,但问题是所有数据最后一次输出。我希望它在函数输出下一个值时连续不断。

我也尝试过stdbuf -o0 xargs printf ...,但根本没有成功。

我尝试使用 echo 但无法将它们放在正确的位置。

预计有两种可能的解决方案。任何一个

  • 使用 printf 连续打印或者
  • 正确放置并有回声

答案1

虽然传递-n2给每 2 个输入单词xargs调用一个printf而不是传递尽可能多的参数(不保证是偶数)会解决这个问题,但这意味着分叉一个进程并加载、初始化、运行、清理一个进程printf每两行可执行一次。

最好是使用文本处理实用程序来处理文本。

甚至sedorawk在这里就足够了:

output_data_func | sed 's/^/Data transferred : /; n; s/^/Speed : /'
output_data_func | awk '
  {getline speed; print "Data transferred : "$0"\nSpeed : "speed}'

相关内容