You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中合并三个文件数据生成指定格式输出?

Bash合并三个文件数据的实现方法

核心需求回顾

  • File1:仅包含单个日期值 20230118
  • File2:多行键值对数据(如 key1=value1、key2=value2 格式)
  • File3:仅包含单个数字值 15678
  • 目标:将三个文件的数据按指定格式合并输出

方法一:使用Awk(推荐,灵活易扩展)

Awk可直接在脚本内读取多文件变量,适合处理结构化文本合并。

场景1:每行键值对附加日期和编号

若需将File1、File3的值作为全局字段,追加到File2每行首尾(逗号分隔),执行命令:

awk '
BEGIN {
    # 读取File1日期并清除换行
    getline date < "File1"
    gsub(/[\r\n]/, "", date)
    # 读取File3编号并清除换行
    getline num < "File3"
    gsub(/[\r\n]/, "", num)
}
# 拼接每行内容输出
{ print date "," $0 "," num }
' File2

场景2:生成结构化分段输出

若需按「日期-键值对-编号」的分段格式输出,命令如下:

awk '
BEGIN {
    getline date < "File1"
    gsub(/[\r\n]/, "", date)
    getline num < "File3"
    gsub(/[\r\n]/, "", num)
    print "Date: " date
    print "---"
    print "Key-Value Pairs:"
}
# 输出所有键值对
{ print }
END {
    print "---"
    print "ID: " num
}
' File2

方法二:使用Shell变量+Sed

先通过Shell命令读取File1、File3的值,再用Sed修改File2内容,适合简单字符串替换场景:

# 读取文件值并去除换行符
date=$(cat File1 | tr -d '\n')
num=$(cat File3 | tr -d '\n')
# 在File2每行首尾追加日期和编号
sed "s/^/$date,/; s/$/,$num/" File2

注意事项

  • 如果File1/File3存在多余换行或空白字符,务必用tr -d '\n'或gsub(/[\r\n]/, "", var)清除,避免输出格式混乱。
  • 若需对File2的键值对做拆分、过滤等操作,优先选择Awk,它对字段操作的支持远优于Sed。

内容的提问来源于stack exchange,提问作者saanvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:50:26