【发布时间】:2020-11-25 22:08:32
【问题描述】:
我正在尝试编写一个 bash 脚本,以从我的 boxen 的不同位置获取三个用户字典,并将它们组合起来,删除重复项,然后将它们写回各自的区域。
但是,当我 cat 文件并执行 sort -u 或 uniq 时,重复的行仍然存在:
Alastair
Alastair
Albanese
Albanese
Alberts
Alberts
Alec
Alec
Alex
Alex
我将其范围缩小到其中一个文件,该文件来自 Microsoft Outlook/Windows,名为 CUSTOM.DIC。通过使用file -i 检查它,我发现它是一个 UTF-16le 文件(并且在直接与 UTF-8 文件连接时正在打印东方字符),所以我运行了命令
iconv -f utf-16le -t utf-8 CUSTOM.DIC -o CUSTOMUTF8.DIC
然而,当我将该文件与其他 UTF-8 文件连接时,它会产生无法使用 sort -u 或 uniq 删除的重复项。
我发现对于大文件,file -i 只能从前(很多)千行中猜测文件格式,所以我运行了命令
file_to_check="CUSTOMUTF8.DIC"
bytes_to_scan=$(wc -c < $file_to_check)
file -b --mime-encoding -P bytes=$bytes_to_scan $file_to_check
输出:
所以转换发生了,输出文件combined.txt也是UTF-8,为什么我不能删除重复的行?
我还检查了合并文件中是否有任何尾随空格。
这感觉像是很多人以前都会遇到的问题,但我找不到答案(当然,或者我创建了错误的搜索字符串)...
【问题讨论】:
-
鉴于我每人看到两个,我猜一个有
\n换行符,另一个有\r\n换行符。对您的数据进行十六进制转储。
标签: sorting text duplicates text-processing uniq