将 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 文件合并为一个文件,然后再次拆分它们的主要内容,如果未能解决你的问题,请参考以下文章