END {
file = "a.txt"
system(cat file)
}
¿Quiero hacer algo así? (abrir un archivo cuyo nombre esté en una variable awk).
¿Cómo se hace?
Respuesta aceptada:
El problema es que system() pasa la línea de comando a un shell, por lo que, en general, debe escapar de todos los caracteres especiales del shell en el nombre del archivo.
awk tiene una matriz asociativa ENVIRON que se asigna al entorno que recibió, pero desafortunadamente, la asignación no afecta el entorno de los comandos ejecutados a través del system
o getline
awk -v q="'" '
function escape(str) {
gsub(q, q "\" q q, str)
return q str q
}
BEGIN {
file = "a.txt"
system("cat " escape(file))
}'
Por supuesto, si el archivo es "a.txt" o puede asegurarse de que su ruta nunca contenga caracteres especiales de shell, puede salirse con la suya:
system("cat " file)
Si puede asegurarse de que no contenga comillas simples, podría hacer lo siguiente:
system("cat '''" file "'''")