Chris Down já mostrou como você pode obter outra coisa para regexps usando uma declaração explícita 'if' em um bloco. Você também pode obter o mesmo efeito de outras maneiras, embora a solução dele seja provavelmente melhor.
Uma é escrever um terceiro regex que corresponda apenas ao texto não correspondido pelos outros, no seu caso, isso seria algo como isto:
awk '/^R1/ { print "=>" $0}
/^R2/ { print "*" $0}
/^[^R]/ || /^R[^12]/ { print $0 } '
Observe que isso usa regexps ancorados - o ^ no início dos regexps corresponde apenas ao início de uma linha - seus padrões originais não fizeram isso, o que diminui ligeiramente a correspondência, pois verifica todos os caracteres de uma linha em vez de pulando até a próxima linha. O terceiro caso ("else") corresponderá a uma linha que começa com um caractere que não é 'R' ([^ R]) ou que começa com um 'R' seguido por um caractere que não é um '1' ou ' 2 '(R [^ 12]). Os dois significados diferentes de ^ são um tanto confusos, mas esse erro foi cometido há muito tempo e não será alterado tão cedo.
Para usar regexps complementares, eles realmente precisam ser ancorados; caso contrário, o [^ R] corresponderia, por exemplo, ao 1 seguinte. Para regexps muito simples como você, essa abordagem pode ser útil, mas à medida que os regexps se tornam mais complexos, essa abordagem se torna incontrolável. Em vez disso, você pode usar variáveis de estado para cada linha, assim:
awk '{ handled = 0 }
/^R1/ { print "=>" $0; handled = 1}
/^R2/ { print "*" $0; handled = 1}
{ if (!handled) print $0 } '
Isso define manipulado como zero para cada nova linha e, em seguida, como 1 se corresponder a um dos dois regexps e, finalmente, se ainda for zero, executa a impressão $ 0.