3つの別々の列に出力を印刷する

3つの別々の列に出力を印刷する
MYPATH=/var/www/html/error_logs/
TOTALFILE=$(ls $MYPATH* | wc -l)
FILETIME=$(stat --format=%y $MYPATH* | head -5 | cut -d'.' -f1)  
FILE=$(ls -1tcr $MYPATH* | head -5 | rev | cut -d/ -f1 | rev)
TOPLINE=$(head -1 $MYPATH* | grep -Po '".*?"' | head -5)

この5つの情報ファイルをヘッダー付きの列にエレガントに印刷するにはどうすればよいですか?

FILE CREATED TIME   | FILE NAME        | ERROR HEADER
---------------------------------------------
$FILETIME           | $FILE            | $TOPLINE
2012-11-29 11:27:45 | 684939947465     | "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)"

そして5つのファイルすべてについても同様です。

total files: $TOTALFILE

私が欲しいものを簡単に得る方法はありますか?

各変数をエコーするときに得られる結果は次のとおりです。

2012-11-29 11:27:45 2012-11-29 11:27:41 2012-11-28 23:33:01 2012-11-26 10:23:37 2012-11-19 22:49:36
684939947465 1313307654813 1311411049509 1234980770182 354797376843
"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)" "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)" "Connection to localhost:6379 failed: Connection refused (111)" "An error occurred connecting to Redis." "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)"

ベストアンサー1

使用することをお勧めしますprintf、例えば:

printf "%-30s | %-30s | %-30s" "$FILETIME" "$FILE" "$TOPLINE"

これは%-30s 、文字列型の入力パラメータに30文字が予約されていることを示します。左揃えを示します-

おすすめ記事