为什么uniq会去掉韩文字符串?

为什么uniq会去掉韩文字符串?

我有一个包含 220k 个名称的 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
"이선동"
$

回答拉什的评论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
동선이
동이선
선동이
선이동
이동선
이선동

相关内容