perl -ln0e's/\s+/ /g;print$"x(40-($c=2+length$&)/2),$&while/.{0$c,}? |.+/g' a.txt w.txt a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a The same principle applies to any text file, basically splitting words only on spaces or new lines perl -ln0e's/\s+/ /g;print$"x(40-($c=2+length$&)/2),$&while/.{0$c,}? |.+/g' w.txt a.txt The same principle applies to any text file, basically splitting words only on spaces or new lines a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a