首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell - cat -将文件内容合并到一个大文件中

shell - cat -将文件内容合并到一个大文件中
EN

Stack Overflow用户
提问于 2012-05-24 20:06:59
回答 6查看 38.8K关注 0票数 12

我正在尝试使用bash将文件列表(大于1K)的内容合并到一个大文件中。

我尝试了以下cat命令:

代码语言:javascript
复制
cat * >> bigfile.txt

然而,此命令所做的是合并所有内容,包括已经合并的内容。

例如file1.txt

代码语言:javascript
复制
content1

file2.txt

代码语言:javascript
复制
content2

file3.txt

代码语言:javascript
复制
content3

file4.txt

代码语言:javascript
复制
content4

bigfile.txt

代码语言:javascript
复制
content1
content2
content3
content2
content3
content4
content2

但我只想

代码语言:javascript
复制
content1
content2
content3
content4

在.txt文件中

另一种方式是cat file1.txt file2.txt ...等等。但是我不能为超过1k的文件这样做!

谢谢您一直鼓励我!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-24 20:10:41

问题是您将bigfile放在相同的目录中,因此使其成为*的一部分。所以就像这样

代码语言:javascript
复制
cat dir/* > bigfile

如果您的fileN.txt文件位于dir/中,应该可以按您所希望的那样工作

票数 24
EN

Stack Overflow用户

发布于 2012-05-24 20:30:40

在重新阅读您的问题时,您似乎希望将数据附加到bigfile.txt,但不添加重复项。您必须将所有内容都通过sort -u来过滤掉重复项:

代码语言:javascript
复制
sort -u * -o bigfile.txt

sort的-o选项允许您在使用输出覆盖文件之前,安全地将bigfile.txt的内容包含在要排序的输入中。

编辑:假设对bigfile.txt进行了排序,您可以尝试一个分两个阶段的过程:

代码语言:javascript
复制
sort -u file*.txt | sort -um - bigfile.txt -o bigfile.txt

首先,我们对输入文件进行排序,删除重复的文件。我们通过管道将输出传递给另一个sort -u进程,这个进程也使用了-m选项,该选项告诉sort合并两个以前排序过的文件。我们将合并的两个文件是- (标准输入,来自第一个sort的流)和bigfile.txt本身。我们再次使用-o选项,在将输出作为输入读取之后,允许我们将输出写回bigfile.txt

票数 4
EN

Stack Overflow用户

发布于 2012-05-24 20:43:00

您可以将输出文件保存在相同的目录中,只是需要比*更复杂一点

代码语言:javascript
复制
shopt -s extglob
cat !(bigfile.txt) > bigfile.txt
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10737207

复制
相关文章

相似问题

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