명령줄 기록이 포함된 History.txt 파일에서 중복 항목을 제거하는 코드입니다.
BEGIN{
if (data[$0]++ == 0)
lines[++count] = $0;
}
END {
for(i=1; i<count; i++)
print lines[i];
}
data
코드에는 무엇이 있으며 왜 와 비교됩니까 0
?
답변1
이는 입력의 고유한 라인을 기억하기 위한 것입니다.
Jeff Schaller가 지적했듯이 $0
블록에 정의되어 있지 않습니다.BEGIN
더 정확한 코드는
{
if (data[$0]++ == 0)
lines[++count] = $0;
}
END {
for(i=1; i<count; i++)
print lines[i];
}
심지어
!data[$0]++ { lines[++count] = $0; }
END {
for(i=1; i<count; i++)
print lines[i];
}
행의 첫 번째 발생은 data[$0]
0과 같으며 line[ ]
해당 행이 수신됩니다.
테스트 후에는 data[$0]
증가하고( ++
예 사후 증가) 동일한 내용을 가진 행에 대해 테스트는 false로 평가됩니다.
이 END
문은 모든 줄을 순서대로 인쇄합니다.
당신은 또한 볼 수 있습니다awk '!a[$0]++'는 어떻게 작동하나요?