다른 큰 텍스트 파일에서 발견된 문자열을 포함하는 큰 텍스트 파일의 줄 제거 - 파일 정렬

다른 큰 텍스트 파일에서 발견된 문자열을 포함하는 큰 텍스트 파일의 줄 제거 - 파일 정렬

다른 큰 파일에 나열된 문자열이 포함된 하나의 큰 파일에서 줄을 삭제하려고 할 때 여전히 문제가 있습니다.

  grep -vwFf file1 file2 - FAILS due to memory exhaustion.

나는 다음을 사용했습니다 :

  comm -23 file1 file2

[https://stackoverflow.com/questions/4366533/remove-lines-from-file-which-appear-in-another-file][1]

정렬된 파일과 매우 큰 파일에 대해 작동하지만 문자열이 포함된 줄을 제거하는 것이 아니라 중복된 줄을 제거하는 데에만 작동합니다.

내가 찾고 있는 문자열이 각 줄의 시작 부분에 있도록 두 개의 큰 파일을 정렬했습니다.

텍스트 파일:

  AAAAA blah blah blah
  AAAAB blas blas blas
  CCCCC sdf sf sdf

문자열 파일

  AAAAA
  CCCCC

감사해요.

답변1

$file1여러 개의 작은 파일(/tmp 또는 mktemp 사용)을 버스트한 다음 각 파일을 반복하고 $file1grep하는 것이 어떻습니까? 패턴 $file1파일()의 이상적인 크기는 시스템에 따라 다릅니다.

여기에서는 각 행 $file1에 1000개의 행이 있습니다.

i=1 while [ $i -lt $count ] do sed -n "$i,$(($i +1000))p" file1.txt >> /tmp/file${1}.txt i=$(( $i + 1001)) done

이제 /tmp에 file.txt라는 파일이 많이 있으므로 다음을 수행할 수 있습니다.

for file1 in $(ls /tmp/file*.txt) do grep -vwFf $file1 file2 done

mktemp를 사용하는 것이 더 안전합니다.

TEMP_DIR=$(mktemp)

for file1 in $(ls ${TEMP_DIR}/file*.txt) do grep -vwFf $file1 file2 done

관련 정보