END {
file = "a.txt"
system(cat file)
}
Ich möchte so etwas tun? (Öffnen Sie eine Datei, deren Name in einer awk-Variablen steht).
Wie wird das gemacht?
Akzeptierte Antwort:
Das Problem besteht darin, dass system() die Befehlszeile an eine Shell übergibt, sodass Sie im Allgemeinen alle Shell-Sonderzeichen im Namen der Datei maskieren müssen.
awk hat ein assoziatives ENVIRON-Array, das auf die empfangene Umgebung abgebildet wird, aber leider hat die Zuweisung keine Auswirkung auf die Umgebung der Befehle, die über system
ausgeführt werden oder 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))
}'
Wenn die Datei „a.txt“ ist oder Sie sicherstellen können, dass ihr Pfad niemals Shell-Sonderzeichen enthält, können Sie natürlich mit:
davonkommensystem("cat " file)
Wenn Sie sicherstellen können, dass es keine einfachen Anführungszeichen enthält, können Sie Folgendes tun:
system("cat '''" file "'''")