여러 txt 파일에서 중복 줄 제거 [닫기]

여러 txt 파일에서 중복 줄 제거 [닫기]

폴더에 모두 12개의 텍스트 파일이 있고 각 파일에는 약 500만 줄이 있으며 각 파일 자체에는 중복 줄이 없지만 여러 파일에 중복 줄이 있습니다. 각 파일에서 중복 줄을 제거하고 싶지만 여전히 저장 중입니다. 저는 많은 Linux 정렬 명령을 시도했지만 계속해서 파일을 병합합니다. 저는 Windows, Linus 및 Mac을 사용하고 있습니다. 이를 수행할 수 있는 코드나 응용 프로그램이 있습니까?

답변1

모든 중복 항목을 제거하되 파일에서 첫 번째 중복 항목을 유지하고 다른 파일에서 제거하려면 다음과 같이 awk를 사용할 수 있습니다. 이렇게 하면 줄 순서도 유지됩니다.

awk '!seen[$0]++ { print >FILENAME".new" }' file1 file2 ... file12

여기에는 최대 12개의 파일이 있으므로 awk를 통해 열려 있는 파일을 닫을 필요는 없지만 처리 및 완료된 후에도 각 파일을 닫을 수 있습니다.

awk '!seen[$0]++ { 
    if(prev!=FILENAME) close(prev".new");
    print >FILENAME".new";
    prev=FILENAME }
' file1 file2 ... file12

셸 및 외부 명령을 사용한 mv다음 출력 파일의 이름을 원래 이름으로 바꿀 수 있습니다.rename명령도 마찬가지입니다.)

for file in ./*.new; do echo mv -v -- "$file" "${file%.new}"; done

참고: echo결과에 만족하면 삭제하세요.


GNU awk가 있는 경우 -i inplace옵션을 사용하여 다음과 같이 파일을 수정하고 전체 명령을 단순화할 수 있습니다.

gawk -i inplace '!seen[$0]++' file1 file2 ... file12

관련 정보