On Fri, Jan 07, 2011 at 04:17:17AM +0300, Alexander Tiurin wrote: > ~$ time for i in `seq 0 10000` ; do echo /o/23/4 | cut -d'/' -f2 ; done > > /dev/null
Others have already begun investigating the internal causes of the slowdown. But if you actually want this particular piece of code to run more quickly, you can optimize it quite a bit: x=/o/23/4 for ((i=0; i<=10000; i++)); do tmp=${x#*/}; echo "${tmp%%/*}"; done There's no need for all those forks you were doing. (And then you're going to say "But this was just an example, and my real code is more complex." And you still won't show the real code. And we'll get in a big fight. And everyone will be sad. So all I can really do for you is give general advice, like "Don't use echo|cut when you can use parameter expansion. Don't use seq, ever, because it's Linux-only and is a stupid way to count when bash has builtin integer arithmetic.") P.S., imadev:~$ bash-4.1.9 imadev:~$ x=/o/23/4 imadev:~$ time for ((i=0; i<=10000; i++)); do tmp=${x#*/}; echo "${tmp%%/*}"; done >/dev/null real 0m2.080s user 0m2.020s sys 0m0.040s imadev:~$ time for ((i=0; i<=10000; i++)); do tmp=${x#*/}; echo "${tmp%%/*}"; done >/dev/null real 0m2.082s user 0m2.020s sys 0m0.050s imadev:~$ time for ((i=0; i<=10000; i++)); do tmp=${x#*/}; echo "${tmp%%/*}"; done >/dev/null real 0m2.118s user 0m2.050s sys 0m0.050s