awk에서 파일을 캡처하는 방법은 무엇입니까?

awk에서 파일을 캡처하는 방법은 무엇입니까?
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}'

관련 정보