END {
file = "a.txt"
system(cat file)
}
Vorrei fare una cosa del genere? (apri un file il cui nome è in una variabile awk).
Come si fa?
Risposta accettata:
Il problema è che system() passa la riga di comando a una shell, quindi nel caso generale è necessario eseguire l'escape di tutti i caratteri speciali della shell nel nome del file.
awk ha un array associativo ENVIRON mappato sull'ambiente che ha ricevuto, ma sfortunatamente l'assegnazione non influisce sull'ambiente dei comandi eseguiti tramite 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))
}'
Ovviamente, se il file è "a.txt" o puoi assicurarti che il suo percorso non contenga mai caratteri speciali della shell, puoi farla franca:
system("cat " file)
Se puoi assicurarti che non contenga virgolette singole, puoi fare:
system("cat '''" file "'''")