如何用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
相关产品推荐
相关产品推荐

