그래프 데이터베이스로 대량 가져오려는 220,000개의 이름이 포함된 CSV 파일이 있습니다. 대량 가져오기에서는 각 노드가 한 번만 나타날 수 있다는 제한을 적용하므로 다음과 같이 sort
중복 항목을 제거 하고 싶습니다 uniq
.
sort all-authors.csv | uniq > unique-authors.csv
누락된 노드를 조사하는 동안 다음과 같은 이상한 동작을 관찰했습니다.
$ grep 이선동 unique-authors.csv
$ grep 이선동 all-authors.csv
"이선동"
$
이름이 전달되었으나 sort
손실되었습니다 uniq
.
$ sort all-authors.csv | grep 이선동
"이선동"
$ sort all-authors.csv | uniq | grep 이선동
$
다음과 같은 영어가 아닌 다른 이름과 함께 작동합니다.
$ grep '잔쎈 우베' *csv
all-authors.csv:"잔쎈 우베"
unique-authors.csv:"잔쎈 우베"
$
여기서 무슨 일이 일어나고 있는 걸까요?
편집: 로케일에 대한 출력 추가
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
$
편집: 한 줄 파일을 추가하고 sort -u 시도 출력을 추가했습니다.
영향을 받은 문자열만 포함된 파일에 대한 pLumo의 의견에 답변하려면 다음을 수행하십시오.
$ grep 이선동 all-authors.csv > single-author.csv
$ sort single-author.csv | uniq
"이선동"
$
Rush의 의견에 대한 답변 sort -u
:
$ sort -u all-authors.csv | grep 이선동
uniq에 대한 별칭을 설정하지 않았고 을 사용하여 확인했지만 alias | grep uniq
아무것도 반환하지 않습니다.
답변1
다음 답변을 바탕으로 : https://stackoverflow.com/questions/5982531/behaviour-of-gnu-sort-command-with-non-letter-ascii-characters-such-as-dot-or
이것은 나에게 잘 작동합니다.
아니요LC_COLLATE=C
sort test | uniq
이선동
그리고LC_COLLATE=C
LC_COLLATE=C sort test | LC_COLLATE=C uniq
동선이
동이선
선동이
선이동
이동선
이선동