为什么 sort -u 或 uniq 不删除串联文本文件中的重复项?

问题描述 投票:0回答:2

我正在尝试编写一个 bash 脚本,从我的盒子中的不同位置获取三个用户词典,并将它们组合起来,删除重复项,然后将它们写回到各自的区域。

但是,当我

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,那么为什么我不能删除重复的行?

我还检查了组合文件中是否有尾随空格。

这感觉就像很多人以前见过的问题,但我找不到答案(或者我创建了错误的搜索字符串,当然)...

sorting text duplicates text-processing uniq
2个回答
1
投票

非常感谢@Andrew Henle - 我知道这会很简单!

确实,使用

hexdump -c combined2.txt
我看到有些行以
\n
结尾,有些以
\r\n
结尾。

所以我下载了

dos2unix
并运行了

dos2unix combined2.txt
sort -u combine2.txt > combined3.txt

一切都很好!

再次感谢安德鲁!


0
投票

另一件事是在行尾之前添加 /r,然后排序 -u 或 uniq

sed 的/([^ ])$/ /'

效果非常好,之后我能够恢复独特的线条。我所有的重复项都消失了,因为其中一些有 /n,另一些有 /r/n

© www.soinside.com 2019 - 2024. All rights reserved.