END {
file = "a.txt"
system(cat file)
}
Run Code Online (Sandbox Code Playgroud)
我想做那样的事情?(打开一个名称在 awk 变量中的文件)。它是如何完成的?
getline 是你的朋友:
awk 'BEGIN{file="a.txt";while ((getline<file) > 0) {print}}'
Run Code Online (Sandbox Code Playgroud)
问题是 system() 将命令行传递给 shell,因此在一般情况下,您需要转义文件名中的所有 shell 特殊字符。
awk 有一个 ENVIRON 关联数组,它映射到它收到的环境,但不幸的是,分配给它不会影响通过system
或执行的命令的环境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))
}'
Run Code Online (Sandbox Code Playgroud)
当然,如果文件是“a.txt”或者您可以确保其路径永远不会包含任何 shell 特殊字符,您可以摆脱:
system("cat " file)
Run Code Online (Sandbox Code Playgroud)
如果您可以确保它不包含单引号字符,您可以这样做:
system("cat '\''" file "'\''")
Run Code Online (Sandbox Code Playgroud)