Yep, as always, try to choose the right tool for the job.
sed is pretty powerful, but in truth it's nowhere near the level of
awk.
awk is a full scripting language with variables, arrays, functions (built-in and user-defined), a full floating-point math engine, and more.
sed just can't compete with all that.
The real difference though is in the underlying design of the work-flow.
sed is the "stream editor", a
line-oriented tool. It's designed for quickly parsing (and modifying, inserting, or deleting) lines in
start-to-end sequence. As long as you stick with that paradigm, it is very fast and efficient. But when it comes to multi-line work, particularly when you have to "look back" to previous lines, it can get tedious to impossible, since it's really designed for moving one-way only.
awk, on the other hand, is
field-oriented. It breaks the input text up into "records", then breaks each record up into fields (both user definable). Then you can use the large number of features it offers to manipulate those fields pretty much any way you wish. It does have some quirks that can make it awkward to use in some situations, though. Trying to preserve the same exact layout of input delimiters in the output is one particularly irritating example.
To sum it up,
sed is best suited for line-oriented, unidirectional text modification, particularly free-form text, while
awk is designed more for use on tables and other regularly-delimited, fixed-format data, and when you need to do more advanced data manipulations (such as arithmetic).
Finally, you might consider learning how to use
ed as well. It's the original source of much of
sed's syntax, so they are similar in many ways, but as an actual
text editor, it can be more flexible when scripting modifications to text files, since it doesn't suffer
sed's one-way streaming limitation.
How to use ed:
http://wiki.bash-hackers.org/howto/edit-ed
http://snap.nlc.dcccd.edu/learn/nlc/ed.html
(also read the info page)