web-dev-qa-db-ja.com

一部のテキストをbashで印刷し、特定の幅までスペースを埋め込むにはどうすればよいですか?

変数を含むbashスクリプトのテキストをエコーし​​、その変数をパディングして、残りのテキストを揃えるために常に適切なスペースを右側に配置したいと思います。

これが私が欲しいものの例です:

Echoing random number 1080    [ OK ]
Echoing random number 443     [ OK ]
Echoing random number 34842   [ OK ]

数値の長さはさまざまです(おそらく5桁または6桁以下)。

私はprintfがこれを行うことができ、次のことを行うことで変数を右揃えできることを知っています:

printf "Echoing random number %5s   [ OK ]" $Rand_NUM

ただし、これによりテキストは次のようにフォーマットされます。

Echoing random number  1080   [ OK ]
Echoing random number   443   [ OK ]
Echoing random number 34842   [ OK ]

そしてもちろん、スペースでエコーするだけでは機能しません:

echo "Echoing random number ${Rand_NUM}   [ OK ]"

これを生成します:

Echoing random number 1080   [ OK ]
Echoing random number 443   [ OK ]
Echoing random number 34842   [ OK ]

最初の例のようにテキストを印刷する方法はありますか?

39
PHLAK

使用する -フィールドを左揃えにします。

printf "Echoing random number %-5s   [ OK ]" $Rand_NUM

あるいは、Red Hat Linuxシステムを使用している場合、緑色のOKプロンプトと赤色のFAILEDプロンプト(起動時に表示されるプロンプト)を出力する定義済みの機能があります。

#!/bin/bash

. /etc/init.d/functions

echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo
55
John Kugelman

すべての行を1つのvarまたはテキストファイルに収集し、columnコマンドでパイプ処理します。だからこれ(私のサンプルファイル/tmp/columns.txt

Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]

これになった

Echoing  random  number  1080      [  OK  ]
Echoing  random  number  44332356  [  OK  ]
Echoing  random  number  34842     [  OK  ]
Echoing  random  number  342       [  OK  ]

コマンド例:cat /tmp/columns.txt | column -t

4
sobi3ch