逐行合并文件

逐行合并文件

为了举例,我有两个文件:

文件A.txt

1.

2.

3.

文件B.txt

ABC

防御

高血压

我想合并以获得:

输出.txt

1.ABC

2.防御

3.GHI

我需要合并每一行,将一个文件的内容放在行首,将另一个文件的内容放在行后。我无法手动执行此操作,因为有超过 30,000 行。我使用的是 Windows,但如果需要,我可以安装 Linux。

我确实搜索过在这个网站和整个互联网上,但我只找到了非常老旧和过时的帖子、合并多个文件但不是逐行合并的解决方案,或者需要太多编码知识的解决方案,而我缺乏这些知识。我也尝试使用 excel 合并两列,但我无法绕过 256 个字符的限制。如果已经有了答案,很抱歉,我错过了。任何帮助都非常感谢。谢谢。

答案1

使用paste命令,例如

$ paste FileA.txt FileB.txt 
1.  ABC
2.  DEF
3.  GHI

注意:添加-d' '以避免在列之间添加空格。

要将输出重定向到新文件,请附加:> NewFile.txt

在 Windows 上,您可以安装Git 外壳或者赛格威. 或者使用适用于 Windows 的 Docker

答案2

在 Linux 上,一个简单的命令利用差异(几乎在每个 unix/linux 系统上都默认安装)及其-y标志(并排比较)sed可删除 diff 过程插入的不需要的空格/制表符。

$ diff -y 1.txt 2.txt | sed 's/\s*|\t*//g'
1.a
2.b
3.c

鉴于文件1.txt

1.
2.
3.

2.txt

a
b
c

以上假设您有相同行数的文件并且每行都不同,从您的问题来看似乎就是这种情况。

答案3

使用 Vim 编辑器,例如

  1. 并排打开两个文件:vim FileA.txt FileB.txt -O
  2. 在第一个文件中,通过按下以下按键垂直选择 2 列:

    1. 1Shift- G(转到文件开头)。
    2. Control- V(进入视觉阻挡模式)。
    3. Shift- G$(选择两列)。
    4. y(拉/复制到缓冲区)。
  3. Control通过点击: - w,转到下一个文件w
  4. 确保您位于第一行:1Shift- G
  5. 在第一行,点击:Shift-P垂直粘贴。
  6. 保存并退出 (:wq)。

查看演示:

導播


要对较大的文件自动执行上述步骤,可以录制宏并再次调用它,或者可以使用ex命令(Vim 的一部分)以非交互方式编辑文件,例如,请参阅:如何以非交互方式编辑文件(例如在管道中)?

Go 可以实现类似的Sublime Text,可以使用 Vintage(Vim)插件,也可以通过垂直选择列Alt,复制并粘贴到另一个文件中。

答案4

使用库达文本具有多选功能的编辑器。

  • 选择文件-1 中的所有内容
  • 在文件 1 中调用“选择/将选择拆分为行”
  • 选择文件-2 中的所有内容
  • 在文件 2 中调用“选择/将选择拆分为行”
  • 复制到文件 2 中的剪贴板(多行)
  • 在 file-1 中,按 End 将插入符号置于行尾
  • !! 确保文件 1 中的插入符号数等于复制到剪贴板的行数(如果末尾不需要插入符号 - Ctrl+单击即可将其删除)
  • 如果它们相等,则在行尾按 Ctrl+V(粘贴)- 这会逐行粘贴剪贴板

相关内容