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

如何用Bash脚本处理FASTA文件 提取标题并转换序列为大写

原脚本问题

  • 分两次调用awk扫描文件,序列头和序列内容的对应逻辑容易出错
  • 以>为记录分隔符后用$2取序列的逻辑不适用于跨行的FASTA序列,会直接截断多行长序列
  • 没有临时存储序列和头的对应关系,无法实现先输出所有序列头、再输出所有对应序列的需求

修改后可用脚本

#!/bin/bash
# 先清空旧输出文件避免内容追加错误
> output.txt

# 直接用awk处理所有目标FASTA文件
awk '
# 匹配序列头行
/^>/ {
    # 遇到新的序列头时,先把上一个已读完的序列存入数组
    if (seq_count > 0) {
        seqs[seq_count] = current_seq
    }
    seq_count++
    # 存储当前序列头,保留原始格式
    headers[seq_count] = $0
    # 重置当前序列临时存储变量
    current_seq = ""
    next
}
# 处理序列内容行,逐行拼接
{
    current_seq = current_seq $0
}
# 所有文件处理完成后执行输出
END {
    # 存储最后一个序列(没有下一个>触发存储)
    seqs[seq_count] = current_seq
    # 先按顺序输出所有序列头
    for (i=1; i<=seq_count; i++) {
        print headers[i]
    }
    # 再按顺序输出所有转大写的对应序列
    for (i=1; i<=seq_count; i++) {
        print toupper(seqs[i])
    }
}
' seq/*.txt >> output.txt

可选调整

如果需要保留原始序列的换行格式,只需要把拼接序列的行改为current_seq = current_seq $0 "\n"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:06:03