linux - 在 bash 脚本中合并两个文本文件

标签 linux bash

我有一个包含以下内容的文本文件 (FILE_A.txt):

Content1
Content2
Content3

和其他包含此内容的文本文件 (FILE_B.txt):

A[#]
B[#]
C[#]

我想以这种方式将 FILE_A.txt 和 FILE_B.txt 合并到其他文件 (FILE_C.txt) 中:

A[Content1]
B[Content2]
C[Content3]

我如何在 Linux 中使用 bash shell(sed、cut、grep 等)来实现这一点?

最佳答案

我们开始吧。

# awk 'NR==FNR{a[NR]=$0;next;} sub(/#/,a[FNR])' FILE_A.txt FILE_B.txt
A[Content1]
B[Content2]
C[Content3]

这是如何运作的?

  • NR==FNR - 如果记录号与 FILE 记录号匹配,则导致运行以下语句 - 也就是说,我们当前仅读取第一个 tfile。
  • {a[NR]=$0;next;} - 将第一个文件的值存储在数组中。
  • sub(/#/,a[FNR]) - 进入第二个文件后,将 # 替换为第一个文件中存储的匹配值。请注意,这不在大括号内,因此它被评估为一个条件。如果 sub() 语句成功,则打印当前行。

关于linux - 在 bash 脚本中合并两个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822852/

相关文章:

python - bash:Visual Studio Code 中意外标记 `&' 附近出现语法错误

c++ - 为什么 find-utils 中的 find 程序上的 execl(...) 不会输出任何内容?

bash - 从不同的目录中删除文件

bash - 提取json字段内容失败

linux - netcat:监听通过 WAN 传入的连接

bash - Bash 中的双花括号 - 错误替换

bash - 为进程设置时间限制并将标准错误写入文本文件

linux - 在 Linux 中使用 Core Dump 检查点/重启

linux - 使: no rule to make target

c++ - 使用 execv 从 C++ 代码执行 Linux 脚本失败