Cómo cat un file de awk?

END { file = "a.txt" system(cat file) } 

Deseo hacer algo como eso? (abra un file cuyo nombre esté en una variable awk). ¿Cómo se hace?

El problema es que el sistema () pasa la línea de command a un shell, por lo que, en el caso general, debe escaping de todos los caracteres especiales del shell en el nombre del file.

awk tiene una matriz asociativa ENVIRON que está asignada al entorno que recibió, pero desafortunadamente, asignarla no afecta el entorno de los commands ejecutados a través del system o getline

 awk -vq="'" ' function escape(str) { gsub(q, q "\\" qq, str) return q str q } BEGIN { file = "a.txt" system("cat " escape(file)) }' 

Por supuesto, si el file es "a.txt" o puede asegurarse de que su ruta nunca contendrá ningún carácter especial de shell, puede salirse con la suya:

 system("cat " file) 

Si puede asegurarse de que no contenga caracteres de comillas simples, podría hacer lo siguiente:

 system("cat '\''" file "'\''") 

getline es tu amigo:

 awk 'BEGIN{file="a.txt";while ((getline<file) > 0) {print}}' 

Si lo que pretendes hacer es definir el file que se debe procesar en el script awk en sí, puedes alterar la matriz ARGV y la variable ARGC de forma análoga:

 awk 'BEGIN{ ARGV[ARGC] = "your_file.txt" ; ARGC++} {print}'