如何用awk/sed交换固定4行FASTA文件中的指定行
使用awk或sed实现固定4行FASTA文件的行互换
问题描述
我有一个固定4行的FASTA格式文件,原内容如下:
>ID.1 GGAACACGACATCCTGCAGGGTTAAAAAAGAAAAAATCAGTAAAAGTACTGGA >ID.2 GGAATACCACATCCCGCAGGGTTAAAAAAGAAAAAATCAGTAACAGTACTGGA
需要实现第1行与第3行互换、第2行与第4行互换,最终得到如下结果:
>ID.2 GGAATACCACATCCCGCAGGGTTAAAAAAGAAAAAATCAGTAACAGTACTGGA >ID.1 GGAACACGACATCCTGCAGGGTTAAAAAAGAAAAAATCAGTAAAAGTACTGGA
解决方案
1. 使用awk
通过缓存每行内容,最后按目标顺序输出:
awk 'NR==1{l1=$0} NR==2{l2=$0} NR==3{l3=$0} NR==4{l4=$0} END{print l3; print l4; print l1; print l2}' input.fasta
简单说明:用变量分别存储第1到4行的内容,处理完所有行后,按3→4→1→2的顺序打印。
2. 使用sed
写法一(直观易懂,适合固定4行场景)
sed '3p;4p;1p;2p;1,4d' input.fasta
简单说明:先按3、4、1、2的顺序打印对应行,再删除原文件的1-4行,最终输出就是互换后的内容。
写法二(利用sed的缓存空间机制)
sed '1{h;d}; 2{H;d}; 3p; 4G' input.fasta
简单说明:
- 第1行:存入缓存空间并跳过打印
- 第2行:追加到缓存空间并跳过打印
- 第3行:直接打印
- 第4行:将缓存空间的内容(原1、2行)追加到当前行后打印,最终输出
3→4→1→2的顺序
内容的提问来源于stack exchange,提问作者SaltedPork
相关产品推荐
相关产品推荐

