如何用Awk拆分SAM文件并保留指定头部行至所有拆分文件
拆分SAM文件并添加头部到每个子文件
可以用awk直接实现,无需额外步骤,核心是先缓存头部内容,再给每个新的输出文件只写入一次头部:
# 缓存前3行@开头的头部 NR<=3 && /^@/ { header = header $0 "\n"; next } # 处理序列行 { out = $3 # 首次写入该文件时先输出头部 if (!seen[out]) { print header > out seen[out] = 1 } print > out }
使用方法
- 把上述代码保存为
split_sam.awk - 执行命令:
awk -f split_sam.awk your_input.sam
灵活调整
如果你的SAM头部不止3行,而是所有@开头的行都要作为头部,把第一行的NR<=3 && /^@/改成/^@/即可,这样会缓存所有头部行。
这种方法用关联数组seen记录已写入头部的文件,避免重复写入,同时处理大文件效率也很高,不需要生成临时文件。
内容的提问来源于stack exchange,提问作者Somu
相关产品推荐
相关产品推荐

