シェルスクリプト出力の書式設定

シェルスクリプト出力の書式設定

固定出力幅の使い方はprintf

以下はスクリプトの例です。

#!/bin/bash
OK=$(printf '\t%+50s\n' OK)
FAIL=$(printf '\t%+50s\n' FAIL)
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
        echo "$i $OK"
done

出力:

a                                                       OK
aa                                                      OK
aaa                                                     OK
aaaa                                                    OK
aaaaaa                                                  OK
aaaaaaaaaaaaaaaaa                                                  OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                                               OK

私は次のようなものが欲しい:

a                                                       OK
aa                                                      OK
aaa                                                     OK
aaaa                                                    OK
aaaaaa                                                  OK
aaaaaaaaaaaaaaaaa                                       OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                              OK

答え1

簡単な方法:

スクリプトをパイプで接続します。column -t

$ script.sh | column -t
a                           OK
aa                          OK
aaa                         OK
aaaa                        OK
aaaaaa                      OK
aaaaaaaaaaaaaaaaa           OK
aaaaaaaaaaaaaaaaaaaaaaaaaa  OK

答え2

printf希望の出力を得るには、次の方法を使用します。

#!/bin/bash
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
    printf '%-50sOK\n' $i 
done

スクリプト出力:

a                                                 OK
aa                                                OK
aaa                                               OK
aaaa                                              OK
aaaaaa                                            OK
aaaaaaaaaaaaaaaaa                                 OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                        OK

  • OK- 静的文字列を次の位置に移動するとき滞在( printf FORMAT [ARGUMENT])

  • $i-printf引数として扱われる

答え3

出力形式を指定するツールを使用しておらず、$i幅が増えるにつれて出力は整列しません。

変える

echo "$i $OK"

そして

printf "%-50s %s\n" "$i" "$OK"

(「foo」を実際の文字列に置き換えます)。

どこ

  • 50s固定幅50文字の文字列です。
  • -(マイナス記号)は文字列を左揃えにします。
  • man 3 printfフォーマット文字列の詳細についてはを参照してください。

関連情報