다음 awk 스크립트의 의미를 설명해 줄 수 있는 사람이 있나요?

다음 awk 스크립트의 의미를 설명해 줄 수 있는 사람이 있나요?

입력 파일에서 빈 필드가 있는 레코드를 삭제하기 위해 다음 awk 스크립트가 작성되었습니다. 하지만 이해하는 데 어려움이 있습니다. 이 글을 쓰게 된 이유를 자세히 설명해주세요.

awk -F, '{for(i=1;i<=NF;i++)if($i==""){next}}1' inputfile

답변1

이를 구성 요소로 나누어 보겠습니다.

awk                    # The actual program
-F,                    # Set the field delimiter to a comma
'{                     # Beginning of the main series of action statements
for(i=1;i<=NF;i++)     # Your typical for loop.   NF is the number of fields 
                       # in the input
  if($i==""){          # $i will expand to e. g. $1, then $2, etc.,  which 
                       # is each field in the input data
                       # If it is "" (or an empty string):
     next}             # Skip to the next entry.  End of conditional
                       # and of the foor loop (no braces here)
}                      # End of the main series of action statements
1'                     # awkish shorthand basically for `print`, and end of
                       # the script
inputfile              # The file to be processed

기본 작업은 데이터를 포함하는 것이므로 awk스크립트는 빈 데이터 필드가 있는 레코드를 건너뛰고 건너뛰지 않은 모든 항목을 인쇄합니다.

관련 정보