Comments and spacing can not get anywhere near the readability that functions can, as I will demonstrate. Without functions, you can't see the forest for the trees - big problems hide among many lines of detail. In other words, people can't simultaneously focus on the fine details and on the big picture. That might not be obvious in a short script; so long as it remains short it may be readable enough. Software gets bigger, though, not smaller, and certainly it's part of the entire software system of your company, which is surely very much larger, probably millions of lines.
Consider if I gave you instructions such as this:
Place your hands on your desk.
Tense your arm muscles.
Extend your knee and hip joints.
Relax your arms.
Move your arms backwards.
Move your left leg backwards.
Move your right leg backwards.
(continue for 10010,000 more lines)
By the time you got halfway through, or even 5% through, you would have forgotten what the first several steps were. You couldn't possibly spot most problems, because you couldn't see the forest for the trees. Compare with functions:
stand_up();
walk_to(break_room);
pour(coffee);
walk_to(office);
That's certainly much more understandable, no matter how many comments you might put in the line-by-line sequential version. It also makes it far more likely you'll notice that you forgot to make the coffee, and probably forgot sit_down() at the end. When your mind is thinking of the details of grep and awk regexes, you'reyou can't be thinking the big picture - "what if there is no coffee made"?
Functions primarily allow you to see the big picture, and notice that you forgot to make the coffee (or that someone might prefer tea). At another time, in a different frame of mind, you worry about the detailed implementation.
There are also other benefits discussed in other answers, of course. Another benefit not clearly stated in the other answers is that functions provide a guarantee that's important in preventing and fixing bugs. If you discover that some variable $foo in the proper function walk_to() was wrong, you know that you only have to look at the other 6 lines of that function to find everything that could have been affected by that problem, and everything that could have caused it to be wrong. Without (proper) functions, anything and everything in the whole system might be a cause of $foo being incorrect, and anything and everything might be affected by $foo. Therefore you can't safely fix $foo without re-examining every single line of the program. If $foo is local to a function, you can guarantee any changes are safe and correct by checking only that function.