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: myfile
myfile의 각 줄에 대해 한 번씩 인쇄됩니다. 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:
.