Chris Down ya mostró cómo puede obtener un else para expresiones regulares mediante el uso de una declaración explícita 'if' en un bloque. También puede obtener el mismo efecto de otras maneras, aunque su solución es probablemente mejor.
Una es escribir una tercera expresión regular que solo coincida con el texto que no coincida con los demás, en su caso, esto se vería así:
awk '/^R1/ { print "=>" $0}
/^R2/ { print "*" $0}
/^[^R]/ || /^R[^12]/ { print $0 } '
Tenga en cuenta que esto usa expresiones regulares ancladas: la ^ al comienzo de las expresiones regulares solo coincidirá al comienzo de una línea; sus patrones originales no hicieron esto, lo que ralentiza ligeramente la coincidencia ya que verificará todos los caracteres en una línea en lugar de saltando hasta la siguiente línea. El tercer caso ("else") coincidirá con una línea que comienza con algún carácter que no es 'R' ([^ R]) o que comienza con una 'R' seguida de un carácter que no es '1' o ' 2 '(R [^ 12]). Los dos significados diferentes de ^ son algo confusos, pero ese error se cometió hace mucho tiempo y no se cambiará pronto.
Para usar expresiones regulares complementarias, realmente necesitan estar ancladas, ya que de lo contrario el [^ R] coincidiría, por ejemplo, con el 1 siguiente. Para expresiones regulares muy simples como las que tiene, este enfoque puede ser útil, pero a medida que las expresiones regulares se vuelven más complejas, este enfoque será inmanejable. En su lugar, puede usar variables de estado para cada línea, así:
awk '{ handled = 0 }
/^R1/ { print "=>" $0; handled = 1}
/^R2/ { print "*" $0; handled = 1}
{ if (!handled) print $0 } '
Esto establece que se maneje a cero para cada nueva línea, luego a 1 si coincide con cualquiera de las dos expresiones regulares, y finalmente, si aún es cero, ejecuta la impresión $ 0.