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を試しましたが、正しい場所にインポートできませんでした。

2つの可能な解決策が予想される。誰でも

  • 印刷を続けるには、printfを使用してください。または
  • 正しく配置され、エコー

答え1

できるだけ多くの引数を渡すのではなく(偶数は保証されていません)、-n22つの入力ワードごとに1つxargsずつ呼び出すと問題は解決しますが、プロセスを分岐し、2行ごとにプロセスをロード、初期化、実行、およびクリーンアップすることを意味します。 1回実行可能です。printfprintf

テキストを処理するには、テキスト処理ユーティリティを使用するのが最善です。

ここでは偶数sedであれば十分です。awk

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

関連情報