首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中的合并文件

Linux中的合并文件
EN

Stack Overflow用户
提问于 2012-07-22 05:42:36
回答 1查看 4.4K关注 0票数 1

我正在使用Cygwin合并多个文件。然而,我想知道我的方法是否正确。这既是一个问题,也是一个讨论:)

首先,关于我拥有的文件的一些信息:

  1. 这两个文件都有ASCII和非ASCII字符。
  2. File1中有7899097线,大小为~70.9Mb
  3. File2中有14344391线,大小为~ 136.6 Mb

文件编码信息:

代码语言:javascript
复制
$ 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

这是我所遵循的合并两个文件的方法,对它们进行排序,然后删除所有重复的条目:

  1. 我创建了一个临时文件夹,并将两个文本文件都放在其中。
  2. 我运行以下命令来合并这两个文件,但在这两个文件之间保留一个行间隔 用于*.txt中的文件;做猫$file >> output.txt >> output.txt do

生成的output.txt文件中包含22243490行,大小为207.5 Mb。

现在,如果我按照如下所示运行排序命令,就会得到一个错误,因为其中存在非ASCII字符(可能是unicode,宽字符):

代码语言:javascript
复制
sort -u output.txt
string comparison failed: Invalid or incomplete multibyte or wide character

因此,我将环境变量LC_ALL设置为C,然后按如下方式运行该命令:

代码语言:javascript
复制
cat output.txt | sort -u | uniq >> result.txt

而且,result.txt中有22243488线,大小为207.5 Mb。

所以,result.txt和output.txt是一样的

现在,我已经知道output.txt中有许多重复的条目,那么为什么上面的命令不能删除重复的条目呢?

另外,考虑到这些文件的大小,我想知道这是否是一种合并多个文件、对它们进行排序然后进行唯一处理的有效方法?

EN

回答 1

Stack Overflow用户

发布于 2012-07-22 06:40:34

嗯,我会用

代码语言:javascript
复制
cat file1.txt file2.txt other-files.* | recode enc1..enc2 | sort | uniq > file3.txt 

但是要小心--这可能会导致一些大的文件大小的问题,包括千兆字节(或更大的),无论如何,几百兆字节的文件可能就没问题了。如果我想要真正的效率,例如有非常大的文件,我首先删除单个文件副本,然后排序,合并一个一个,然后再排序,再删除重复行。理论上,uniq,-c和grep滤波器可以去除重复。尽量避免陷入解决方案中不必要的复杂程度:)

paths.html

编辑:

代码语言:javascript
复制
mv file1.txt file1_iso1234.txt 
mv file2.txt file2_latin7.txt
ls file*.txt |while read line; do cat $line |recode $(echo $line|cut -d'_' -f2 |cut -d'.' -f1)..utf8 ; done | sort | uniq > finalfile.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11598002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档