O problema é que system () passa a linha de comando para um shell, portanto, no caso geral, você precisa escapar de todos os caracteres especiais do shell no nome do arquivo.
o awk tem uma matriz associativa ENVIRON que é mapeada para o ambiente que recebeu, mas, infelizmente, atribuí-la não afeta o ambiente dos comandos executados via system
ou 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))
}'
É claro que, se o arquivo for "a.txt" ou você puder ter certeza de que o caminho nunca conterá caracteres especiais do shell, você poderá usar:
system("cat " file)
Se você puder ter certeza de que não contém caracteres de aspas simples, você pode fazer:
system("cat '\''" file "'\''")