演算子の優先順位は、1つの式の中で、異なる演算子が接近して現れる場合の、演算子のグループ化のされ方を決定します。たとえば、`*'は`+'よりも高い優先順位を持っています。したがって、a + b * cは、bとcを掛け、その積にaを加えることを意味します。
演算子の優先順位は、カッコを書き加えることで変更できます。優先順位のルールは、カッコを書き加えない場合はカッコが決められていると考えることができます。実際、演算子の特殊な組み合わせがある場合は、いつでもカッコを使うのが賢明です。なぜなら、他の人がそのプログラムを読む場合、この場合に優先順位はどうなるのかを思い出せないことがあるかもしれないからです。あなたも忘れてしまうかもしれません。そしてミスを犯してしまうかもしれません。明示的にカッコを使えば、そのようなミスは防ぐことができます。
同じ優先順位の演算子が使われている場合、逆順にグループ化される代入演算子、条件演算子、指数演算子を除いて、最も左の演算子が最初にグループ化されます。したがって、a - b + cは(a - b) + cのようにグループ化され、a = b = cはa = (b = c)のようにグループ化されます。
前置単項演算子の優先順位は、単項演算子しか含まれていない限り問題にはなりません。なぜなら、単項演算子のパース方法は、最も奥が最初にパースされるという1つの方法しかないからです。したがって、$++iは$(++i)を意味し、++$xは++($x)を意味します。しかし、このオペランドのあとに他の演算子が続く場合、単項演算子の優先順位は問題になります。したがって、$x**2は($x)**2を意味しますが、-x**2は-(x**2)を意味します。なぜなら、`-'は`**'より優先順位が低く、一方、`$'は`**'より優先順位が高いからです。
以下に、awkの演算子を優先順位の低い順に示します。
print文およびprintf文におけるI/Oリダイレクション演算子は、文のレベルに属し、式のレベルには属しません。リダイレクションは、他の演算子のオペランドになりうるような式を構成しません。したがって、カッコを使わずに、低い優先順位の他の演算子の近くで、リダイレクション演算子を使うのは無効です。たとえば、print foo > a ? b : cのような組み合わせは、構文エラーになります。