본문 바로가기

중복 줄 제거

목록을 정리하세요. 중복을 제거하고, 제대로 정렬하고, 빈 줄을 없앱니다. 목록을 조용히 줄여 버리는 대신, 어떤 줄이 몇 번 중복됐는지 알려 드립니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
정렬
정리
결과

여기에 결과 내용이 표시돼요.

사용 방법

1

목록 붙여 넣기

이메일, URL, 상품 코드 등 한 줄에 하나씩이면 무엇이든 됩니다. 텍스트 파일을 끌어다 놓아도 됩니다.

2

“같다”의 기준 정하기

끝 공백 무시, 대소문자 무시, 첫 번째 또는 마지막 항목 유지, 아니면 중복이 있었던 줄을 모두 삭제할 수 있습니다.

3

정렬과 정리

자연 정렬, 순서 뒤집기, 섞기, 줄 번호 붙이기, 빈 줄 제거를 한 뒤 결과를 복사하세요.

남긴 줄에는 무슨 일이 일어나는가

이 페이지에는 서로 다른 두 가지 공백 처리가 있으며, 혼동하지 않는 것이 좋습니다. 비교용 공백 자르기는 키를 만들 뿐 줄을 고치지 않습니다. 남는 줄은 원래 공백을 정확히 그대로 유지합니다. 정리 옵션은 그 반대입니다. 들여쓰기 제거, 연속 공백과 탭 합치기, 줄 끝 공백 제거는 실제 편집이며 중복 제거보다 먼저 적용되므로, 하나를 켜면 줄의 모양뿐 아니라 무엇이 중복인지도 조용히 바뀝니다.

빈 줄도 다른 줄과 똑같이 비교되므로, 첫 번째 빈 줄을 제외한 모든 빈 줄이 다른 중복과 함께 사라집니다. 문단 사이 간격이 있는 목록은 첫 번째 빈 줄이 있던 자리에만 빈 줄 하나가 남은 채로 돌아옵니다. 또한 중복 보고에는 원래 줄이 아니라 키가 표시됩니다. 즉 공백을 잘라 낸 형태이고, 대소문자 무시를 켰다면 소문자로 바꾼 형태입니다. 따라서 목록에 Smith와 SMITH로 나온 항목은 소문자로 한 번, 횟수 2로 보고됩니다. 이 목록은 가장 많이 나온 50개까지만 표시합니다.

무엇을 넣든 결과는 라인 피드로만 이어지므로, Windows 파일에서 붙여 넣은 목록은 캐리지 리턴이 빠집니다. 대개 원하던 결과이지만, 결과를 이를 따지는 곳에 다시 붙여 넣는다면 알아 두세요. 부작용이 하나 더 있습니다. “대소문자 무시”를 켜면 비교뿐 아니라 정렬도 바뀌며, 이때 정렬은 악센트 글자와 일반 글자도 구분하지 않게 되므로 resume과 résumé가 따로 떨어지지 않고 함께 나옵니다.

다른 작업이 필요할 때

목록이 사실 표라면 줄 단위 비교는 맞지 않는 도구입니다. 한 열의 값이 같은 두 행을 “중복”으로 보는 CSV는 문자열의 문제가 아니며, 이를 문자열로 다루면 중복을 놓치거나 비슷해 보일 뿐인 행을 지우게 됩니다. 이미 열어 둔 파일이라면 스프레드시트 자체의 중복된 항목 제거 기능이 이를 제대로 처리하며, 명령줄에서는 mlr uniq -g가 기준이 되는 필드를 지정해 크기에 상관없이 처리합니다.

탭에 담기에는 너무 큰 목록이나 다음 주에 또 정리할 목록이라면, 명령줄에서 스트리밍으로 처리하는 식 하나면 됩니다. awk '!seen[$0]++'는 첫 번째 항목과 원래 순서를 유지하는데, 이는 이 페이지의 기본 동작과 정확히 같으며 메모리보다 큰 파일에도 쓸 수 있습니다. 공백 자르기, 대소문자 통합, 중복 보고는 없습니다. 그것이 대가이며, 천만 줄짜리 파일이라면 올바른 선택입니다.

자주 묻는 질문

제 목록이 어딘가에 저장되나요?

아니요. 아무것도 저장하지 않고 어떤 요청도 보내지 않습니다. 페이지가 로드된 뒤에는 인터넷 연결을 끊어도 계속 작동합니다.

중복을 제거했는데 왜 아직 중복이 남아 있나요?

거의 언제나 줄 끝 공백 때문입니다. 끝에 붙은 공백 수가 다른 두 줄은 화면에서는 똑같아 보이지만 실제로는 다르므로, 정확히 비교하면 둘 다 남고 도구가 고장 났다고 생각하게 됩니다. 그래서 여기서는 비교 전에 공백을 잘라 내는 옵션이 기본으로 켜져 있습니다. 중요한 점은 이 옵션이 비교에만 영향을 준다는 것입니다. 남는 줄은 원래 텍스트를 그대로 유지합니다. 줄을 몰래 고치는 것은 “중복 제거”의 뜻이 아니기 때문입니다.

어느 쪽이 남나요?

기본값은 첫 번째이며, 나머지 줄의 순서는 건드리지 않습니다. 목록이 이미 의미 있는 순서로 되어 있을 때 중요한 점입니다. 대신 마지막 항목을 남기거나, 중복이 있었던 줄을 모두 삭제해 딱 한 번만 나온 줄만 남길 수도 있습니다. 마지막 방법은 목록에만 있는 고유 항목을 찾을 때 씁니다.

정렬하면 왜 item10이 item2보다 앞에 오나요?

일반적인 사전순 정렬에서는 “1”이 “2”보다 앞이고 나머지 숫자는 비교하지도 않기 때문입니다. 자연 정렬을 켜면 연속된 숫자를 수로 비교하므로, 사람이 기대하는 대로 item2가 item10보다 앞에 옵니다. 악센트가 있는 텍스트도 제대로 처리합니다. 단순 비교는 글자가 아니라 내부 숫자 값을 비교하므로 “Zürich”를 “Zyzzyva” 뒤로 정렬합니다.

무엇이 제거됐는지 알려 주나요?

네. 두 번 이상 나온 줄을 횟수와 함께, 가장 많이 나온 것부터 보여 드립니다. 세 줄이 사라졌다는 사실보다 어떤 항목이 네 번 나왔는지 아는 편이 대개 더 유용합니다.

섞기는 정말 무작위인가요?

네. 브라우저의 암호학적 난수 소스로 Fisher-Yates 셔플을 합니다. 흔히 쓰는 지름길인 무작위 비교 함수로 정렬하기는 사실 섞기가 아닙니다. 정렬 알고리즘은 일관된 비교를 전제로 하므로, 무작위 비교를 쓰면 결과가 원래 순서 쪽으로 눈에 띄게 치우칩니다. 목록에서 당첨자를 뽑는다면 이 차이가 중요합니다.

크기 제한이 있나요?

정해진 크기 제한은 없고 사용 가능한 메모리가 한도입니다. 수십만 줄짜리 목록도 문제없습니다.

참고: 정렬은 브라우저의 언어 규칙을 따르므로, 악센트 글자와 다른 문자 체계도 바이트 값이 아니라 읽는 사람이 기대하는 순서로 정렬됩니다. 그래서 브라우저마다 순서가 조금 다를 수 있습니다. 아주 큰 목록은 통째로 메모리에 올립니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.