コンソール上で文字列を斜めに表示させたいなと思ったので、やってみることにした。 想定ではもっと簡単、かつ短く記述できると思っていたのだけど、意外とそうでもなかった。
とりあえず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で配列にしてから処理しているようだ。
echo かえるー|jq -Rr './""|. as$a|keys[]|" "*.+$a[.]'#シェル芸
— eban (@eban) 2017年11月11日