我正在尝试使用bash将文件列表(大于1K)的内容合并到一个大文件中。
我尝试了以下cat命令:
cat * >> bigfile.txt然而,此命令所做的是合并所有内容,包括已经合并的内容。
例如file1.txt
content1file2.txt
content2file3.txt
content3file4.txt
content4bigfile.txt
content1
content2
content3
content2
content3
content4
content2但我只想
content1
content2
content3
content4在.txt文件中
另一种方式是cat file1.txt file2.txt ...等等。但是我不能为超过1k的文件这样做!
谢谢您一直鼓励我!
发布于 2012-05-24 20:10:41
问题是您将bigfile放在相同的目录中,因此使其成为*的一部分。所以就像这样
cat dir/* > bigfile如果您的fileN.txt文件位于dir/中,应该可以按您所希望的那样工作
发布于 2012-05-24 20:30:40
在重新阅读您的问题时,您似乎希望将数据附加到bigfile.txt,但不添加重复项。您必须将所有内容都通过sort -u来过滤掉重复项:
sort -u * -o bigfile.txtsort的-o选项允许您在使用输出覆盖文件之前,安全地将bigfile.txt的内容包含在要排序的输入中。
编辑:假设对bigfile.txt进行了排序,您可以尝试一个分两个阶段的过程:
sort -u file*.txt | sort -um - bigfile.txt -o bigfile.txt首先,我们对输入文件进行排序,删除重复的文件。我们通过管道将输出传递给另一个sort -u进程,这个进程也使用了-m选项,该选项告诉sort合并两个以前排序过的文件。我们将合并的两个文件是- (标准输入,来自第一个sort的流)和bigfile.txt本身。我们再次使用-o选项,在将输出作为输入读取之后,允许我们将输出写回bigfile.txt。
发布于 2012-05-24 20:43:00
您可以将输出文件保存在相同的目录中,只是需要比*更复杂一点
shopt -s extglob
cat !(bigfile.txt) > bigfile.txthttps://stackoverflow.com/questions/10737207
复制相似问题