内部改行を使用したデータ列の印刷

内部改行を使用したデータ列の印刷

次のように、ログからいくつかの監視データを印刷します。

printf " %10s %5s %25s %15s %15s %s${txtrst}\n" $date $time $metric $status $current_criticality "$failure"

定義された長さのない最後の列を境界内で包みたいです。ここで、左は明確に定義され、右は画面がある場所(通常の改行位置)です。長さを定義しようとしましたが解決されませんでした。

現在の出力例:

09/30/2015 14:39         execution        (SUCCESS)           SUCCESS
09/30/2015 14:34         execution         (FAILED)             ERROR  Step 3: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34         execution         (FAILED)           SUCCESS  Step 1: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34        round_trip         (10.174)             ERROR  Step 1: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34        round_trip         (10.174)           SUCCESS  Step 1: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 13:30        round_trip         (94.652)             ERROR
09/30/2015 13:30        round_trip         (94.652)           SUCCESS
09/30/2015 13:19        round_trip          (0.257)           SUCCESS
09/30/2015 13:16        round_trip        (110.012)             ERROR
09/30/2015 13:16        round_trip        (110.012)           SUCCESS

私は見たいです:

09/30/2015 14:39          execution       (SUCCESS)           SUCCESS
09/30/2015 14:34          execution        (FAILED)             ERROR  Step 3: Match Failed 
                                                                       Blah blah blah blah 
                                                                       blah blah blah.
09/30/2015 14:34          execution        (FAILED)           SUCCESS  Step 1: Match Failed 
                                                                       Blah blah blah blah 
                                                                       blah blah blah.
09/30/2015 14:34         round_trip        (10.174)             ERROR  Step 1: Match Failed 
                                                                       Blah blah blah blah 
                                                                       blah blah blah.
09/30/2015 14:34         round_trip        (10.174)           SUCCESS  Step 1: Match Failed 
                                                                       Blah blah blah blah    
                                                                       blah blah blah.
09/30/2015 13:30         round_trip        (94.652)             ERROR
09/30/2015 13:30         round_trip        (94.652)           SUCCESS
09/30/2015 13:19         round_trip         (0.257)           SUCCESS
09/30/2015 13:16         round_trip       (110.012)             ERROR
09/30/2015 13:16         round_trip       (110.012)           SUCCESS

SQL*PLUSの列型レポートによく似ています: col $column format a15

どんなアイデアでもよろしくお願いします!

ベストアンサー1

以下は最後の列なので動作するクルーガーです。

  1. printf行の最初の部分(次を$failure除くすべての部分)いいえ末尾の新しい行。
  2. echo "$failure" | fold -s -w $desired_width | sed -e "2,\$s/^/$spacing/"

ここでは$desired_width、列の幅$failureで、$ spacingは、2番目の行(3番目の行など)が正しい位置から始まるようにするために必要なスペースの量です。このようなものを使用すると、これらのスペースを簡単に作成できますspacing=$(echo $'\t' | pr -Te71)。正確に計算すれば71なら大丈夫でしょう…

これはfold、改行を実行してから、2番目とそれ以降の列に間隔(ソートのため)を追加することによってsed行われます。印刷すると、最初の行は他の出力に関連付けられます(改行がないため)。

これを正しい方法で行うには、Perlにはいくつかのモジュールがあります。Text::ASCIITableText::SimpleTableText::TabularDisplayこれができるはずです。

おすすめ記事