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 |



コメント