END {
file = "a.txt"
system(cat file)
}
Je souhaite faire quelque chose comme ça? (ouvrir un fichier dont le nom est dans une variable awk).
Comment ça se fait ?
Réponse acceptée :
Le problème est que system() passe la ligne de commande à un shell, donc dans le cas général, vous devez échapper tous les caractères spéciaux du shell dans le nom du fichier.
awk a un tableau associatif ENVIRON qui est mappé à l'environnement qu'il a reçu, mais malheureusement, l'assignation à celui-ci n'affecte pas l'environnement des commandes exécutées 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))
}'
Bien sûr, si le fichier est "a.txt" ou si vous pouvez vous assurer que son chemin ne contiendra jamais de caractères spéciaux du shell, vous pouvez vous en tirer :
system("cat " file)
Si vous pouvez vous assurer qu'il ne contient pas de guillemets simples, vous pouvez :
system("cat '''" file "'''")