파일 이름과 해시가 포함된 텍스트 파일 - 중복 해시가 있는 줄 추출

파일 이름과 해시가 포함된 텍스트 파일 - 중복 해시가 있는 줄 추출

다음 형식을 사용하여 파일 이름과 sha-256 해시가 포함된 큰 텍스트 파일을 생성했습니다. 해시 뒤의 각 줄 끝에 새 줄이 추가되었습니다.

File_1.txt 8208ad321576b521b23b07b9ba598e5c43b03ec4172c96fdbd35a858ec205ae6

file_2.txt ee508a6e34a2383db1b177cb9527bed16ba72b47ceb4d33ab71b47a44c1d0c31

file_3.txt aaf6b8c4a95d0e8f191784943ba1ea5c0b4d4baab733efe8ceb8b35478b6afd2

내가 크게 말하면 수백만 개의 행과 수백만 개의 해시가 있습니다.

해시를 생성하는 데 꽤 오랜 시간이 걸렸습니다. 파일이 30개 이상의 하드 드라이브에 걸쳐 있기 때문에 중복 파일 찾기를 사용하는 것은 불가능했습니다. 파일 이름에는 파일이 저장된 드라이브가 포함되어 있습니다.

이제 디스크 공간을 확보할 시간입니다.

한 번만 발생하는 고유한 해시가 있는 텍스트 파일의 줄을 삭제하고 싶습니다.

해시가 두 번 이상 발생하는 텍스트 파일의 모든 줄을 유지하고 싶습니다.

답변1

awk이 2단계 솔루션보다 더 나쁠 수도 있습니다.

awk 'NR == FNR{if ($2 in a) b[$2]++;a[$2]++; next}; $2 in b' file file

첫 번째 단계에서는 배열을 사용하여 b여러 번 발생한 해시를 추적합니다. 두 번째 패스에서는 해시 값이 있으면 레코드를 인쇄합니다.b

번갈아

sort -k2,2 file | uniq -f 1 -D

여기에는 두 번째 필드를 기준으로 파일을 정렬하고 uniq중복 레코드를 인쇄하도록 파이프하는 작업이 포함됩니다(비교를 수행할 때 첫 번째 필드를 건너뛰는 방식 -f 1). 입력 파일의 크기를 고려할 때 이는 리소스 집약적일 수 있습니다.

관련 정보