【发布时间】:2012-07-22 05:42:36
【问题描述】:
我正在使用 Cygwin 合并多个文件。但是,我想知道我的方法是否正确。这既是一个问题,也是一个讨论:)
首先,关于我拥有的文件的一些信息:
- 这两个文件都有 ASCII 和非 ASCII 字符。
- File1 中有 7899097 行,大小约为 70.9 Mb
- File2 中有 14344391 行,大小约为 136.6 Mb
文件编码信息:
$ file -bi file1.txt
text/x-c++; charset=unknown-8bit
$ file -bi file2.txt
text/x-c++; charset=utf-8
$ file -bi output.txt
text/x-c++; charset=unknown-8bit
这是我合并两个文件的方法,对它们进行排序,然后删除所有重复的条目:
- 我创建了一个临时文件夹并将两个文本文件都放入其中。
-
我运行以下命令来合并两个文件,但在两者之间保留一个换行符
for file in *.txt; do cat $file >> output.txt echo >> output.txt done
生成的 output.txt 文件中有 22243490 行,大小为 207.5 Mb
现在,如果我在其上运行如下所示的排序命令,我会收到一个错误,因为其中存在非 ASCII 字符(可能是 unicode,宽字符):
sort -u output.txt
string comparison failed: Invalid or incomplete multibyte or wide character
所以,我将环境变量LC_ALL设置为C,然后运行命令如下:
cat output.txt | sort -u | uniq >> result.txt
而且,result.txt 中有 22243488 行,大小为 207.5 Mb。
所以,result.txt 和 output.txt 一样
现在,我已经知道 output.txt 中有很多重复条目,那么为什么上面的命令无法删除重复条目?
另外,考虑到文件的大小,我想知道这是否是一种有效的方法来合并多个文件,对它们进行排序,然后将它们唯一化?
【问题讨论】:
-
是否可以将您的问题总结为 - 能够对多字节字符数据文件进行排序和合并?文件是否设置为 UTF-8 编码(BOM 设置是否正确?)
-
我已经编辑了帖子并指定了文件编码格式。不,问题不只是关于排序和合并,我已经给出了一些我想知道的具体细节。是的,排序、合并和删除重复项也是我想知道的。
标签: uniq