END {
file = "a.txt"
system(cat file)
}
そんなことしたいの? (名前がawk変数にあるファイルを開きます。)
どのように実行されますか?
承認された回答:
問題は、system()がコマンドラインをシェルに渡すことです。そのため、一般的なケースでは、ファイル名に含まれるすべてのシェル特殊文字をエスケープする必要があります。
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」である場合、またはそのパスにシェルの特殊文字が含まれないようにすることができる場合は、次の方法で対処できます。
system("cat " file)
一重引用符が含まれていないことを確認できる場合は、次のようにすることができます。
system("cat '''" file "'''")