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

求合并三个文件生成指定格式输出的Bash脚本(samtools场景)

我来帮你搞定这个文件合并的需求!根据你的描述,我们需要把三个文件的内容对应起来生成指定格式的File D,这里有几种简洁的Bash实现方案,你可以根据自己的文件细节选择:

方案1:用paste+sed快速实现(最简洁)

如果你的File C内容是每行一个名称,比如:

name A
name B

我们只需要把name替换成gene,再和File A、File B的值按顺序配对,加上表头即可:

# 先写入表头
echo -e "Column1\tColumn2" > FileD.txt
# 替换File C的名称前缀,同时合并值文件,追加到结果
paste <(sed 's/name/gene/' FileC.txt) <(cat FileA.txt FileB.txt) >> FileD.txt

解释:

  • sed 's/name/gene/' FileC.txt:把File C里的所有name替换成gene,得到gene A、gene B
  • cat FileA.txt FileB.txt:把两个单值文件的内容按顺序输出成两行
  • paste:把前两个命令的输出按制表符分隔合并成两列

方案2:用awk实现更灵活的控制

如果需要更严谨的内容对应(比如确保名称和值的行数严格匹配),可以用awk一次性处理所有文件:

awk '
# 一开始先打印表头
BEGIN {print "Column1\tColumn2"}
# 先读取File C的所有名称,存入数组
NR==FNR {names[NR] = $0; next}
# 再读取合并后的A+B的值,存入数组
NR==FNR {vals[NR] = $0; next}
# 最后把名称替换前缀后和对应的值输出
{
    gsub("name", "gene", names[FNR])
    print names[FNR] "\t" vals[FNR]
}
' FileC.txt <(cat FileA.txt FileB.txt) > FileD.txt

这个方法会先把所有名称和值都存入数组,再逐行配对输出,能避免因为文件行数不一致导致的错误(如果行数不匹配,多余的内容会被忽略)。

方案3:手动构造内容(适合固定少量行的场景)

如果你的文件内容固定只有两行,也可以直接手动构造输出,这种方式最直观:

cat > FileD.txt << EOF
Column1	Column2
gene A	$(cat FileA.txt)
gene B	$(cat FileB.txt)
EOF

这里用了Bash的命令替换$(...),直接把File A和File B的值插入到指定位置,适合行数固定的简单场景。

不管用哪种方法,最终生成的File D都会符合你需要的格式:

Column1    Column2
gene A     100000
gene B     110000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:49