コンソール上で文字列を斜めに表示させたいなと思ったので、やってみることにした。 想定ではもっと簡単、かつ短く記述できると思っていたのだけど、意外とそうでもなかった。

とりあえずawkでやった場合。grepで一度各文字を1行づつに出力し直している。

echo qwerty | grep -o . | awk '{printf("%0"NR"s\n",""$1)}'
[root@BS-PUB-CENT7-01 ~]# echo qwerty | grep -o . | awk '{printf("%0"NR"s\n",""$1)}'
q
 w
  e
   r
    t
     y

awkよりはperlを使った方が、後から読んだ時に分かりやすく記述できる(気がする)。

echo qwerty | grep -o . | perl -lne 'print " " x ($.-1),$_'
[root@BS-PUB-CENT7-01 ~]# echo qwerty | grep -o . | perl -lne 'print " " x ($.-1),$_'
q
 w
  e
   r
    t
     y

jqを使う場合、grepの箇所を省略して記述できる。

echo qwerty | jq -Rr 'range(length)as$r|. as$i|" "*$r|.+$i[$r:$r+1]'
[root@BS-PUB-CENT7-01 ~]# echo qwerty | jq -Rr 'range(length)as$r|. as$i|" "*$r|.+$i[$r:$r+1]'
q
 w
  e
   r
    t
     y

なお、@ebanさんはこれより更に短くしている(awk/perlのやつより短い)。 一度jsonで配列にしてから処理しているようだ。