在UNIX系统中重命名FASTA/FASTQ文件的序列ID
重命名FASTA文件reads ID:首个UUID+下划线+barcode
需求说明
你需要把FASTA文件中每条read的ID行(以>开头),替换成第一个空格前的UUID与末尾barcode=后的内容用下划线连接的格式,序列部分保持不变。
解决方案1:使用sed命令
sed完全能满足你的需求,用正则精准匹配并替换ID行:
sed -E 's/^>([^ ]+) .* barcode=([^ ]+)/>\1_\2/' input.fasta > output.fasta
命令解释:
^>:只匹配以>开头的ID行([^ ]+):捕获第一个空格前的UUID内容(第一个分组).*:匹配ID行中间所有无关内容barcode=([^ ]+):捕获barcode=后面的具体值(第二个分组)>\1_\2:将整行替换为>+ 第一个分组内容 + 下划线 + 第二个分组内容
解决方案2:使用awk命令
如果觉得正则不够直观,awk按字段处理会更清晰:
awk '/^>/ {split($NF, bc, "="); print ">" $1 "_" bc[2]; next} {print}' input.fasta > output.fasta
命令解释:
/^>/:定位到ID行split($NF, bc, "="):把ID行的最后一个字段($NF表示最后一个字段)按=分割,存入数组bc,bc[2]就是我们要的barcode值print ">" $1 "_" bc[2]:输出格式化后的新IDnext:跳过当前行后续处理,直接处理下一行{print}:非ID行(序列内容)直接原样输出
验证效果
用你提供的示例输入测试,两个命令都会生成你预期的输出结果:
>e855552f-9484-4674-8fc4-d9b1f1add023_barcode06 GCTTTAACATTTAGCTATTTATGACACAGTGAAATAAAAGTAATATCTTTTTATTTTTAATTGTATTTATTAGTTACATGTTTTCACATGCATTTAACATAAATGTGATAATTTATGGGAATTACACTACTGTCAAAGTAGTT >c9d90319-ec63-4347-9244-ad080b0815c5_barcode11 GCCTTGACTATATGGTTTACCTGTTCAAATACGACTCTACTCATGGTCGTTTCAAGGGAACAGTTGAGGTTCAAGGATGGTTTCCTCGTAGTAGTCTCAATGGAAACAAATCTCCTGTCTTCTGTGAAAGAGACCCTAAAATC
内容的提问来源于stack exchange,提问作者Mar
相关产品推荐
相关产品推荐

