我正在使用 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 中有很多重复的条目,那么为什么上面的命令无法删除重复的条目呢?
另外,考虑到文件的大小,我想知道这是否是合并多个文件、对它们进行排序然后使它们唯一的有效方法?