min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

CSVに色を付ける(ANSIエスケープシーケンス)

f:id:min117:20210130104639p:plain

 

なんてこった。CSVの各列に色をつけられるらしい。ANSIエスケープシーケンスを使えば可能なようだ。

こうなる。

f:id:min117:20210130103017p:plain

超わかりやすい。

 

ソースはこれ。

f:id:min117:20210130103231p:plain

今後やること

csvファイル名(ebooks.csv)はソース内に固定で書いちゃってるけど、引数で取れるように改良する。

・その際、csvの列数を数えて、各列ごとに違う色に(自動で)なるようにする。

 

コピペ用

#!/bin/bash

 

# http://192.168.3.11:5000/PT3/第43回シェル芸勉強会(LT)-9KewBG30f6I.mp4

 

 

#区切り文字を改行のみに変更

IFS=$'\n'

 

for i in $(cat ebooks.csv)

do

    echo "$i" | sed -E 's/([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)/\x1b[31m\1,\x1b[32m\2,\x1b[33m\3,\x1b[34m\4,\x1b[35m\5\x1b[m/g'

    # echo "$i" | sed -E 's/([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)/\x1b[31m\1,\x1b[32m\2,\x1b[33m\3,\x1b[34m\4,\x1b[35m\5\x1b[m/g'

done

 

# cat ebooks.csv | sed -E 's/([~,]+),([~,]+),([~,]+),([~,]+),([~,]+)/\x1b[31m\1,\x1b[41m\2,\x1b[51m\3,\x1b[61m\4,\x1b[71m\5\x1b[m/g'

 

#区切り文字を元に戻す

IFS="$'\n'$'\t' "

 

なお、IFSを一時的に変更しているのは、スペースを区切り文字として見ないようにするため。

min117.hatenablog.com

 

ヒントはこれ。

www.youtube.com

この「シェル芸勉強会」って何なの。凄すぎ。天才ばっかじゃないか。

www.youtube.com