ふと、ターミナル上で短歌っぽい横書きの文章を縦書きにして表示させることができないかなと思ったので、ちょっとやってみることにした。 rsコマンドがあるとある程度短く書けるのだが、それがないとちょっと長くなってしまった。 一番最初の行が最も長い行の場合、rsコマンドでスペース埋めができるのでちょっと短く記述できる。
rsコマンドを使った場合
# 最初の行が一番長い行ではない場合
echo -e 'あいうえお\0\0かきくけこから\0さしすせそ\0'|xargs -n1 -0 -I@ printf "%-21s\n" @|sed 's/ \{3\}/x/g;s/\B/,/g;s/x/ /g'|head -n-2|rs -c, -T|rev
# 最初の行が一番長い行の場合
echo -e 'あいうえおーに\nかきくけこ\n\nそしてなんと\nさしすせそ\n'|sed 's/\B/ /g' | rs -g0 -n -T | rev | sed 's/ \{3\}/ /g'
blacknon@BS-PUB-UBUNTU-01:~$ # 最初の行が一番長い行ではない場合
blacknon@BS-PUB-UBUNTU-01:~$ echo -e 'あいうえお\0\0かきくけこから\0さしすせそ\0'|xargs -n1 -0 -I@ printf "%-21s\n" @|sed 's/ \{3\}/x/g;s/\B/,/g;s/x/ /g'|head -n-2|rs -c, -T|rev
さ か あ
し き い
す く う
せ け え
そ こ お
か
ら
blacknon@BS-PUB-UBUNTU-01:~$
blacknon@BS-PUB-UBUNTU-01:~$ # 最初の行が一番長い行の場合
blacknon@BS-PUB-UBUNTU-01:~$ echo -e 'あいうえおーに\nかきくけこ\n\nそしてなんと\nさしすせそ\n'|sed 's/\B/ /g' | rs -g0 -n -T | rev | sed 's/ \{3\}/ /g'
さそ かあ
しし きい
すて くう
せな けえ
そん こお
と ー
に
rsコマンドがない場合
echo -e 'あいうえお\0\0かきくけこから\0さしすせそ'|xargs -0 -I@ -n1 sh -c 'printf "%-21s\n" @'| sed 's/ \{3\}/ /g' |awk -F '' '{for(i=1;i<=NF;i++){a[NR,i]=$i}}NF>p{p=NF}END{for(j=1;j<=p;j++){str=a[1,j];for(i
=2;i<=NR;i++){str=str""a[i,j];}print str}}' | rev
blacknon@BS-PUB-UBUNTU-01:~$ echo -e 'あいうえお\0\0かきくけこから\0さしすせそ'|xargs -0 -I@ -n1 sh -c 'printf "%-21s\n" @'| sed 's/ \{3\}/ /g' |awk -F '' '{for(i=1;i<=NF;i++){a[NR,i]=$i}}NF>p{p=NF}END{for(j=1;j<=p;j++){str=a[1,j];for(i
=2;i<=NR;i++){str=str""a[i,j];}print str}}' | rev
さか あ
しき い
すく う
せけ え
そこ お
か
ら
使いどころが無い気もするが、こんなこともできるということで。