END {
file = "a.txt"
system(cat file)
}
我想做这样的事情吗? (打开一个名称位于 awk 变量中的文件)。它是如何完成的?
答案1
获取线 是你的朋友:
awk 'BEGIN{file="a.txt";while ((getline<file) > 0) {print}}'
答案2
问题是 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))
}'
当然,如果文件是“a.txt”或者您可以确保其路径永远不会包含任何 shell 特殊字符,您可以摆脱:
system("cat " file)
如果您可以确保它不包含单引号字符,您可以这样做:
system("cat '\''" file "'\''")
答案3
如果您打算定义应在 awk 脚本本身中处理的文件,则可以相应地更改 ARGV 数组和 ARGC 变量:
awk 'BEGIN{ ARGV[ARGC] = "your_file.txt" ; ARGC++} {print}'