如何从awk中cat文件?

lea*_*ner 4 awk

END {
file = "a.txt"
system(cat file)
}
Run Code Online (Sandbox Code Playgroud)

我想做那样的事情?(打开一个名称在 awk 变量中的文件)。它是如何完成的?

JRF*_*son 6

getline 是你的朋友:

awk 'BEGIN{file="a.txt";while ((getline<file) > 0) {print}}'
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 4

问题是 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)