我正在寻找一个开源(可能是 64 位)Windows 文本编辑器,它允许我从非常大(4GB+)的文本文件中删除重复的行。
您用什么来从大型文本文件中删除重复的行?
答案1
答案2
如果你有 Cygwin 或 MinGW,你可以使用以下命令完成此操作
cat file | sort | uniq >> outfile
假设您想要唯一的行。我不知道这将如何执行,因为对如此大的数据集进行排序可能需要很长时间(或者如果它已经排序,您可以忽略该部分)或者这些命令究竟如何运行(它们是否会消耗 4GB 的 RAM)。
答案3
您可以使用 PilotEdit 删除大文件里的重复行。
答案4
我也在关于的重复问题上发布了这个答案>50GB 文件
假设所有行都短于 7kB,并且您已经从 cygwin/unix 安装了 bash、dd、tail、head、sed 和 sort:
{
i=0
while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= sed -e '1d' -e '$d' | LANG= sort -u ;
do
i=$((1+$i))
done
LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= tail -n 1
LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result
这将文件分成 1024000 字节的块,并从下一个块中添加 3*7*1024 字节(1021 中的“21”)。由于分割可能会切断一行,因此每个块的第一行(1d)和最后一行($d)将被破坏(sed)。
因此为了补偿,再次提取包含最后一块的内容并且只保留其最后一行(tail -n 1),并且再次提取第一行(head -n 1)。
当循环失败时,最后一块已被提取。
sort -u 可能被视为压缩器,但它只对输入进行排序,然后跳过重复项。第一个“sort”压缩所有块。第二个sort
再次压缩所有这些块的连接(sort
自第三次编辑以来,第二个就从上面的代码中消失了,抱歉)。
您说的是文本文件,但我无论如何都假设是二进制文件,因此 LANG=(也变得更快)。