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

标签 text awk terminal

我有数百个 txt 文件,它们都在一个目录中。我希望能够执行以下操作:

  1. 将所有文件合并到一个 txt 文件中。该命令将在与文件名连接时插入一个符号(例如§)。
  2. [然后我对组合文件进行一些工作,其中包括进行更改。其中一些更改涉及使用优先级软件,该软件处理一个大文件比处理大量小文件效果更好]。
  3. 使用第二个命令遍历连接的文件并将其拆分回单独的文件,并使用符号旁边的文件名来命名每个拆分文件。

示例:

加入之前:

文件 1:“Towns.txt”

Béthlem
Cabul
Corinthia
ruined lands
eshcol
Gabbatha
old town

文件 2:“水果和坚果.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:“水果和坚果.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 终端中运行的东西。

最佳答案

您可以尝试以下操作吗?

对于加入命令:

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

对于分割文件:

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

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

关于text - 将 txt 文件合并为一个文件,然后再次将它们拆分回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58013737/

相关文章:

awk - 如何在 sed 语句中评估 awk ?

bash - 使用 sed/awk 删除多余的行

linux - Linux 如何知道嵌入的 ^A 和行尾 ^A

使用 mtext 删除添加到绘图中的文本

c# - 使用 LINQ 逐字读取文本文件

linux - 如何在没有颜色代码的情况下将终端输出重定向到文件

mysql - Mac OS X - 无法通过终端访问 mysql

vb.net - 在组合框中设置所选项目 - vb.net

linux - Gawk 在找到 3 行之间的最小值时无法正常工作

variables - 试图了解如何将参数从 gradle 传递到我的 shell 脚本?