awk
を使って文字色や背景色を変更するには、ANSIエスケープシーケンスを使用します。ターミナル上で出力の色を変更することで、ログやデータ表示を見やすくできます。
チェックツールとか作って、エラー箇所を赤字にしたりすると、見落としや可読性が上がりますよね。
- 目次 -
基本的なANSIエスケープシーケンス
ANSIエスケープコードは \033[
(または \e[
) で始まり、以下のようなコードを組み合わせて色を指定します。
属性 | コード |
---|---|
リセット | 0 |
太字 | 1 |
下線 | 4 |
文字色(前景) | 30~37(黒~白) |
背景色 | 40~47(黒~白) |
例:
- 文字を赤にする →
\033[31m
- 背景を青にする →
\033[44m
- 文字を緑、背景を黄色にする →
\033[32;43m
- すべてリセット →
\033[0m
awk
で文字色や背景色を変更する方法
文字色を変更する
以下の例では echo
の出力を awk
で処理し、特定のカラムの色を変更します。
$ echo -e "apple 100\nbanana 200\ncherry 300" | awk '{print "\033[31m" $1 "\033[0m", $2}'
出力:
apple 100
banana 200
cherry 300
$1
(最初のカラム)を 赤 (31m
) に設定\033[0m
でリセット
背景色を変更する
$ echo -e "apple 100\nbanana 200\ncherry 300" | awk '{print "\033[31;43m" $1 "\033[0m", $2}'
出力:
apple 100
banana 200
cherry 300
$1
を 赤字(31)+黄色背景(43) に変更\033[0m
でリセット
条件によって色を変更する
売上($2)が200未満なら赤で表示する例:
$ echo -e "apple 100\nbanana 200\ncherry 300" | awk '{
if ($2 < 200)
print "\033[31m" $1, $2 "\033[0m"; # 赤
}'
出力:
apple 100
banana 200
cherry 300
複数カラムの色を変える
$ echo -e "apple 100\nbanana 200\ncherry 300" | awk '{
print "\033[34m" $1 "\033[0m", "\033[33m" $2 "\033[0m"
}'
出力:
apple 100
banana 200
cherry 300
$1
(果物名)を 青 (34m
)$2
(数値)を 黄色 (33m
)
列の幅を揃えて色付きで表示する
printf
を使うと、整形して見やすくできます。
$ echo -e "apple 100\nbanana 200\ncherry 300" | awk '{
printf "\033[31m%-10s\033[0m \033[34m%5d\033[0m\n", $1, $2
}'
出力:
apple 100
banana 200
cherry 300
%-10s
: 左揃え10文字%5d
: 右揃え5桁$1
(果物名)を 赤 (31m
)$2
(数値)を 青 (34m
)
まとめ
\033[XXm
を使って文字色・背景色を変えられるawk
のprint
でエスケープシーケンスを組み合わせるprintf
を使うと整形しやすい- 条件分岐で動的に色を変えることも可能
一覧
文字色
色 | ANSI コード |
---|---|
黒 | \033[30m |
赤 | \033[31m |
緑 | \033[32m |
黄 | \033[33m |
青 | \033[34m |
紫 | \033[35m |
シアン | \033[36m |
白 | \033[37m |
リセット | \033[0m |
背景、その他
スタイル | ANSI コード |
---|---|
太字 | \033[1m |
下線 | \033[4m |
背景 黒 | \033[40m |
背景 赤 | \033[41m |
背景 緑 | \033[42m |
背景 黄 | \033[43m |
背景 青 | \033[44m |
背景 紫 | \033[45m |
背景 シアン | \033[46m |
背景 白 | \033[47m |

コメント