답변:
이 awk
프로그램은 각 파일을 한 번 통과합니다.
awk '
NR == FNR {f1[$0] = 1; next}
!($0 in f1)
' file1 file2
comm
이 작업에 유용합니다. 입력 파일을 정렬해야합니다.
# output lines unique to file2
comm -13 <(sort file1) <(sort file2)
in
오퍼레이터 테스트 왼쪽 피연산자는 (결합 또는 인덱스) 배열의 인덱스 인 경우. O (1) 연산이어야합니다. 둔한를 들어, 여기에 설명 : gnu.org/software/gawk/manual/html_node/...
in
에서 전체 배열을 f1
하나의 요소 만 스캔해야합니다 . 나는 32 바이트의 10 ^ 4 ~ 10 ^ 6 개의 임의 문자열을 테스트하고 awk
솔루션 스케일을 선형으로 확장했습니다. ( comm
솔루션은 10 ^ 4에서 2x, 10 ^ 5에서 ~ 1x 및 2x 10 ^ 6에서 더 다양하지만 사용 가능한 메모리에 따라 다릅니다.)
comm
.
grep
같이 수행 할 수 있습니다 .grep -v -f <(command1) <(command2)
!($0 in f1)
내부적으로 작동, 내 말 에 내부 AWK를 . 그것이 모든 배열을 간단하게 스캔한다면, O (n!)이 있어야합니다. :-| 정렬 이 고도로 최적화 된 것 같습니다 ... 관련 정보가 있습니까?