입력 파일에서 빈 필드가 있는 레코드를 삭제하기 위해 다음 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
스크립트는 빈 데이터 필드가 있는 레코드를 건너뛰고 건너뛰지 않은 모든 항목을 인쇄합니다.