Twitter上でそういった処理についてebanさんがやられてたので、理解するため+忘れないために残しておく。

blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | grep -o . | awk 'a=$0=a$0' #シェル芸
あ
あい
あいう
あいうえ
あいうえお

この処理、ぱっと見だと何をしているのかよくわからないのだが、変数aに前の行の内容を継続して代入して$0とセットで出力しているようだ。 以下の内容と同じ処理をしている様子(厳密には$0を上書きしている様子)。

awk '{a=a$0;print a}'
awk '{a=a$0;$0=a;print $0}'
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | grep -o . | awk '{a=a$0;print a}'
あ
あい
あいう
あいうえ
あいうえお
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | grep -o . | awk '{a=a$0;$0=a;print $0}'
あ
あい
あいう
あいうえ
あいうえお

以下のように応用してやることで、後ろから埋める処理についても行えた。 (スペース埋め)

echo abcde | grep -o . | tac | awk '{a=$0a;$0=a;printf("%5s\n",$0)}' # Unicodeでない場合
echo あいうえお | grep -o . | tac | awk '{a=$0a;$0=a;print $0}' | printf "%15s\n" $(cat) | sed 's/   / /g'
blacknon@BS-PUB-UBUNTU-01:~$ echo abcde | grep -o . | tac | awk '{a=$0a;$0=a;printf("%5s\n",$0)}' # Unicodeでない場合
    e
   de
  cde
 bcde
abcde
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | grep -o . | tac | awk '{a=$0a;$0=a;print $0}' | printf "%15s\n" $(cat) | sed 's/   / /g'
    お
   えお
  うえお
 いうえお
あいうえお

最後の文字を基準に回文みたいにして出力する場合。

echo abcde|grep -o .|tac|awk '{a=a?$0a$0:$0;print a}'|xargs -I@ bash -c 'printf "%*s\n" $(( (9 + $(printf @ | wc -c)) / 2 )) @'
echo abcde|grep -o .|awk '{a=a?a$0:$0;"echo "a"|rev|sed s/^.//"|getline b;printf "%*s",5-NR,"";printf "%s\n",a b}'
echo あいうえお| grep -o . | tac | awk '{a=a?$0a$0:$0;print a}' | xargs -I@ bash -c 'printf "%*s\n" $(( (27 + $(printf @ | wc -c)) / 2 )) @' | sed 's/   / /g'
blacknon@BS-PUB-UBUNTU-01:~$ echo abcde|grep -o .|tac|awk '{a=a?$0a$0:$0;print a}'|xargs -I@ bash -c 'printf "%*s\n" $(( (9 + $(printf @ | wc -c)) / 2 )) @'
    e
   ded
  cdedc
 bcdedcb
abcdedcba
blacknon@BS-PUB-UBUNTU-01:~$ echo abcde|grep -o .|awk '{a=a?a$0:$0;"echo "a"|rev|sed s/^.//"|getline b;printf "%*s",5-NR,"";printf "%s\n",a b}'
    a
   aba
  abcba
 abcdcba
abcdedcba
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお| grep -o . | tac | awk '{a=a?$0a$0:$0;print a}' | xargs -I@ bash -c 'printf "%*s\n" $(( (27 + $(printf @ | wc -c)) / 2 )) @' | sed 's/   / /g'
    お
   えおえ
  うえおえう
 いうえおえうい
あいうえおえういあ

更に応用。

echo あいうえお|grep -o .|tac|awk '{a=a?$0a$0:$0;$0=a;printf("%9s\n",a)}'|tac|tee >(tac)|sed 's/  / /g;1i.' | uniq
echo あいうえお|grep -o .|awk '{a=a?a$0:$0;"echo "a"|rev|sed s/^.//"|getline b;printf("%9s\n",a b)}'|tac|tee >(tac)|sed 's/  / /g'|uniq
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお|grep -o .|tac|awk '{a=a?$0a$0:$0;$0=a;printf("%9s\n",a)}'|tac|tee >(tac)|sed 's/  / /g;1i.' | uniq
.
あいうえおえういあ
 いうえおえうい
  うえおえう
   えおえ
    お
   えおえ
  うえおえう
 いうえおえうい
あいうえおえういあ
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお|grep -o .|awk '{a=a?a$0:$0;"echo "a"|rev|sed s/^.//"|getline b;printf("%9s\n",a b)}'|tac|tee >(tac)|sed 's/  / /g'|uniq
あいうえおえういあ
 あいうえういあ
  あいういあ
   あいあ
    あ
   あいあ
  あいういあ
 あいうえういあ
あいうえおえういあ