END {
file = "a.txt"
system(cat file)
}
나도 이런 짓을 하고 싶은 걸까? (awk 변수에 이름이 있는 파일을 엽니다.) 어떻게 이루어 집니까?
답변1
줄을 서다 당신의 친구입니다:
awk 'BEGIN{file="a.txt";while ((getline<file) > 0) {print}}'
답변2
문제는 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 "'\''")
답변3
awk 스크립트 자체에서 처리해야 하는 파일을 정의하려는 경우 ARGV 배열 및 ARGC 변수를 그에 따라 변경할 수 있습니다.
awk 'BEGIN{ ARGV[ARGC] = "your_file.txt" ; ARGC++} {print}'