awk: 빈 파일에 내장된 FILENAME 변수

awk: 빈 파일에 내장된 FILENAME 변수

awk입력이 빈 파일일 때 FILENAME 변수가 아무것도 반환하지 않는 이유는 무엇입니까? awk파일을 열 수 없다는 뜻인가요 ? 열려 있지 않으면 비어 있다는 것을 어떻게 알 수 있습니까? 또는 열려 있으면 파일 이름을 반환하지 않는 이유는 무엇입니까?

나는 읽었다이 게시물, 그러나 다음이 작동해야 하는 이유는 설명하지 않습니다.

awk 'BEGINFILE{print FILENAME}1' filename

아래에는 없습니다.

awk '{print FILENAME}' filename #or
awk 'BEGIN{print FILENAME}' filename

답변1

awk매뉴얼 에서 :

FILENAME  A  pathname  of  the  current input file.
Inside a BEGIN action the value is undefined.  (...)

그게 설명인 것 같아요. 필드가 처리될 때까지 값은 FILENAME정의되지 않습니다 . 빈 파일의 경우 필드가 처리되지 않으므로 변수는 초기화되지 않은 상태로 유지됩니다.

답변2

참고: 이 답변의 일부는 awk특히 GNU에만 해당됩니다.4.0나중에 추가됨BEGINFILE/ENDFILE

한 줄에 블록

awk '{print "File name: " FILENAME}' myfile

이것은 File name: myfilemyfile의 각 줄에 대해 한 번씩 인쇄됩니다. myfile이 빈 파일(0바이트)이면 줄이 포함되지 않으므로 위의 문자열이 전혀 인쇄되지 않습니다.

BEGINFILE막힌

awk 'BEGINFILE{print "File name: " FILENAME}' myfile

지원되는 경우 File name: myfile행이 처리되기 전에 한 번 인쇄됩니다.

그렇지 않고, 지원되지 않으면 BEGINFILE거짓 조건식으로 처리되어 전혀 출력되지 않을 수 있습니다.

BEGIN막힌

awk 'BEGIN{print "File name: " FILENAME}' myfile

이 블록의 평가는 파일이 처리되기 전에 발생하며 이때의 FILENAME값 은 다음과 같습니다.한정되지 않은.

이것gawk문서구체적으로 정의하여 ""인쇄할 것임을 알 수 있습니다 File name:.

관련 정보