다른 txt 파일에 존재하는 txt 파일에서 단어를 삭제하는 방법은 무엇입니까?

다른 txt 파일에 존재하는 txt 파일에서 단어를 삭제하는 방법은 무엇입니까?

파일 a.txt에는 약 100,000개의 단어가 있으며 각 단어는 새 줄에 있습니다.

july.cpp
windows.exe
ttm.rar
document.zip

파일에는 b.txt한 줄씩 한 단어씩 150,000개의 단어가 있습니다. 일부 단어는 file 에서 가져온 것이지만 a.txt일부 단어는 새로운 단어입니다.

july.cpp    
NOVEMBER.txt    
windows.exe    
ttm.rar    
document.zip    
diary.txt

이 파일을 하나로 병합하고, 중복된 줄을 모두 삭제하고, 새로운 줄(에 있지만 a.txt존재하지 않는 줄 b.txt, 그 반대의 줄)을 유지하려면 어떻게 해야 합니까?

답변1

이를 수행하는 명령이 있습니다: comm. 에서 언급한 바와 같이 man comm, 이는 매우 간단합니다:

   comm -3 file1 file2
          Print lines in file1 not in file2, and vice versa.

comm파일 내용이 정렬될 것으로 예상하므로 다음 comm과 같이 호출하기 전에 파일 내용을 정렬해야 합니다.

sort unsorted-file.txt > sorted-file.txt

요약하면 다음과 같습니다.

sort a.txt > as.txt

sort b.txt > bs.txt

comm -3 as.txt bs.txt > result.txt

위 명령 뒤에는 파일에 예상되는 줄이 있습니다 result.txt.

답변2

다음은 다음을 기반으로 하는 짧은 python3 스크립트입니다.게르마르의 답변b.txt, 이는 의 정렬되지 않은 순서를 유지하면서 이를 수행해야 합니다 .

#!/usr/bin/python3

with open('a.txt', 'r') as afile:
    a = set(line.rstrip('\n') for line in afile)

with open('b.txt', 'r') as bfile:
    for line in bfile:
        line = line.rstrip('\n')
        if line not in a:
            print(line)
            # Uncomment the following if you also want to remove duplicates:
            # a.add(line)

답변3

#!/usr/bin/env python3

with open('a.txt', 'r') as f:
    a_txt = f.read()
a = a_txt.split('\n')
del(a_txt)

with open('b.txt', 'r') as f:
    while True:
        b = f.readline().strip('\n ')
        if not len(b):
            break
        if not b in a:
            print(b)

답변4

coreutils 명령을 살펴보십시오 comm.man comm

NAME
       comm - compare two sorted files line by line

SYNOPSIS
       comm [OPTION]... FILE1 FILE2

DESCRIPTION
       Compare sorted files FILE1 and FILE2 line by line.

       With  no  options,  produce  three-column  output.  Column one contains
       lines unique to FILE1, column two contains lines unique to  FILE2,  and
       column three contains lines common to both files.

       -1     suppress column 1 (lines unique to FILE1)

       -2     suppress column 2 (lines unique to FILE2)

       -3     suppress column 3 (lines that appear in both files)

예를 들어 당신은 할 수 있습니다

$ comm -13 <(sort a.txt) <(sort b.txt)
diary.txt
NOVEMBER.txt

( 에 고유한 줄 b.txt)

관련 정보