awkを使って以下の感じにしましたが、
こういう処理は需要無いんですかね。

#!/usr/bin/awk -f

BEGIN {
max=0
}

{
store[NR]=$0
if (length($0)>max) max=length($0)
}

END {
for (i=1;i<=NR;i++) {
while (length(store[i])<max) {
store[i]=store[i] " "
}
}
for (i=1;i<=max;i++) {
for (j=1;j<=NR;j++) {
printf "%s", substr(store[j],i,1)
}
printf "\n"
}
}