シェル芸で横書きの文章を縦書きに変換して表示する

ふと、ターミナル上で短歌っぽい横書きの文章を縦書きにして表示させることができないかなと思ったので、ちょっとやってみることにした。
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'
さそ かあ
しし きい
すて くう
せな けえ
そん こお
 と  ー
    に
Sponsored Links

●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
さか あ
しき い
すく う
せけ え
そこ お
 か  
 ら

 

使いどころが無い気もするが、こんなこともできるということで。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*