Guardar variable entre llamadas encadenadas con pipes a awk

Hola, se me plantea la siguiente duda:

Tene mos un fichero estructurado en columnas, por ejemplo 3

entrada1 x1 y1 z1
entrada2 x2 y2 z2
entradaN xn yn zn

Imaginemos que hay que modificar las columnas tercera y cuarta con un programa y escribir en un fichero final las dos primeras columnas originales y las tercera y cuarta modificadas. El problema es que el programa que modifica las columnas tercera y cuarta sólo admite dos argumentos de entrada y no puedo hacer algo del tipo

cat fichero | awk '{print $3,$4}' | programa > ficheroFinal

porque perdería las información de las dos primeras columnas. ¿Hay alguna manera de hacer (en una sólo llamada desde la línea de comandos) algo del estilo de

cat fichero | awk '{(guardar $1 y $2 an A y B) print $3,$4}' | programa | awk '{print $A,$B,$1,$2}' > ficheroFinal

donde $1 y $2 de la segunda llamada a awk es la salida de programa?

Lo de compartir las variables entre distintas ejecuciones no se puede. Lo que se me ocurre, asumiendo que "programa" solo puede recibir la información por entrada estándar.

awk '{"echo " $3 " " $4 "|" programa|getline procesado; print procesado, $1, $2}' fichero > ficheroFinal

Otra solución menos elegante podría ser usar un fichero intermedio, aunque no creo que sea necesario.

Saludos