将 txt 文件合并为一个文件,然后再次拆分它们

Posted

技术标签:

【中文标题】将 txt 文件合并为一个文件,然后再次拆分它们【英文标题】:Join txt files into a single file and then split them back up again 【发布时间】:2020-01-20 15:34:27 【问题描述】:

我有数百个 txt 文件,它们都在一个目录中。我希望能够做到以下几点:

    将所有文件合并到一个 txt 文件中。该命令将在加入时插入一个符号(例如§)和文件名。 [然后我对合并的文件进行一些工作,其中包括进行更改。其中一些更改涉及使用优先软件,该软件对一个大文件比对许多小文件更有效]。 使用第二个命令检查连接的文件并将其拆分回单独的文件,使用符号旁边的文件名来命名每个拆分文件。

示例:

加入前:

文件 1:“Towns.txt”

Béthlem
Cabul
Corinthia
ruined lands
eshcol
Gabbatha
old town

文件 2:“Fruits and Nuts.txt”

Apples
Pomegranates
Sycamore

加入之后,但在我进行更改之前

(单个文件)

§Towns.txt
Béthlem
Cabul
Corinthia
ruined lands
eshcol
Gabbatha
old town
$Fruits and Nuts.txt
Apples
Pomegranates
Sycamore

加入后我做出改变

(这些更改是在单个文件中手动进行的)

§Towns.txt
Bethlehem
Cabul
Corinth
Ruined lands
Eshcol
Gabbatha
The Old Town
$Fruits and Nuts.txt
Apples
Pomegranates
Sycamore

拆分后:

文件 1:“Towns.txt”

Bethlehem
Cabul
Corinth
Ruined lands
Eshcol
Gabbatha
The Old Town

文件 2:“Fruits and Nuts.txt”

Apples
Pomegranates
Sycamore


我尝试过的步骤

合并文件

我修改了this thread 中的答案,制作了一个awk 命令,该命令可以将文件与带有 § 符号前缀的文件名连接在一起。

awk '(FNR==1)print "§" FILENAME 1' * > ^0join.txt;

这似乎运作良好。

分割文件

这个thread 提供了拆分文件的解决方案。我已经根据自己的需要进行了修改以产生这个:

awk -v RS='§' ' outfile = "output_file_" NR; print > outfile' ^0join.txt   

唯一的问题是输出文件的名称为“outfile1”、“outfile2”等。 他们还将文件名保留在每个文件的顶部,这是我不想要的。 此外,有时当我使用此命令时,它只会将所有内容放在一个名为“outfile”的文件中,而不是将它们拆分。

我还发现 this thread 有另一个解决方案,我重新设计了:

awk 'print $0 "file" NR' RS='§'  ^0join.txt

但是,这似乎没有任何作用。

注意事项

§ 可以是任何其他符号。 我使用的是 Mac OS 10.14.6,所以我想要一些可以在 Mac OS 终端上运行的东西。

【问题讨论】:

【参考方案1】:

请您尝试关注一下。

加入命令:

awk 'FNR==1print "§" FILENAME; 1' Towns.txt  "Fruits and Nuts.txt" > Output_file

分割文件:

awk '/^§/close(file);sub(/^§/,"");file=$0;next print > (file)' Output_file

注意:根据 OP 的 cmets,如果需要将 .txt 文件传递​​给命令,那么我们可以将 /complete/path/to/txt_files/*.txt/ 放在 awk 代码第一个之后,并且可以从那里删除单个文件名(未测试但应该工作)

【讨论】:

它说“awk: can't open file Fruits input record number 25, file Fruits source line number 1” 输出文件只包含城镇。 @big_smile,因为您的文件中有空间,所以我将它们包裹在 " 尝试我编辑的代码,我检查了它们,它们都工作正常,请告诉我? join 命令有效。但是,我有 100 个文件,所以如果它可以在目录上运行,而不需要指定文件名,那就更好了。拆分命令有效,但它将文件名保留在每个文档的顶部。 (例如,因此新拆分的 towns.txt 文档以 towns.txt 开头)。 @big_smile,检查我的编辑加入代码,它现在不应该写文件名,让我知道。 @big_smile,要在目录上运行它,请尝试我的代码,最后尽管文件名像awk '.........' /path/to/files/*.txt 这样传递,这将对所有文本文件等运行,同样你可以编辑它也可以根据您的需要命令。

以上是关于将 txt 文件合并为一个文件,然后再次拆分它们的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中用字符串和 int 解析(拆分)一个 txt 文件

如何拆分文件并并行处理它们然后将它们缝合回去? Unix

如何将多个TXT合并成一个TXT

如何将文本文档批量拆分为变量

如何在git中将大型合并请求拆分为多个部分

将 .txt 文件读取到地图中,然后将其再次保存为 .txt?