linux 中shell从fasta文件中提取指定的scaffold数据
awk实现
001、awk实现,提取第一个scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '/>/ {p = ($0 ~ "chr1")}p' a.fa ## 提取chr1 >chr1 aattcc gg
002、awk实现提取中间任一scaffild
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '/>/ {p = ($0 ~ "chr3")}p' a.fa ## 提取chr3 >chr3 aatt gg
003、awk提取末尾scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '/>/ {p = ($0 ~ /chr5/)}p' a.fa ## 提取chr5 >chr5 aaccgg ttaa
004、随机连续提取
[root@PC1 test]# ls a.fa scaffold.list [root@PC1 test]# cat scaffold.list ## scaffold列表 chr2 chr4 chr5 [root@PC1 test]# for i in $(cat scaffold.list ); do awk -v a=$i '/>/ {p = ($0 ~ a)}p' a.fa >> result.fa; done ## 利用循环提取 [root@PC1 test]# ls a.fa result.fa scaffold.list [root@PC1 test]# cat result.fa ## 提取结果 >chr2 ttccggaa ggccttgg cc >chr4 ttccgg >chr5 aaccgg ttaa
sed实现
001、提取第一个scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# sed -n '/>chr1/,/>/p' a.fa | sed '1b; />/d' ## 提取chr1 >chr1 aattcc gg
002、提取中间任一scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# sed -n '/>chr3/,/>/p' a.fa | sed '1b; />/d' ## 提取chr3 >chr3 aatt gg
003、提取末尾scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# sed -n '/>chr5/,/>/p' a.fa | sed '1b; />/d' ## 提取chr5 >chr5 aaccgg ttaa
004、多条scaffold 连续提取
[root@PC1 test]# ls a.fa scaffold.list [root@PC1 test]# cat scaffold.list ## scaffold列表 chr1 chr3 chr5 [root@PC1 test]# for i in $(cat scaffold.list ); do sed -n "/>$i/,/>/p" a.fa | sed '1b; />/d' >> result.fa; done ## 利用循环结构连续提取 [root@PC1 test]# ls a.fa result.fa scaffold.list [root@PC1 test]# cat result.fa ## 提取结果 >chr1 aattcc gg >chr3 aatt gg >chr5 aaccgg ttaa
awk实现
001、提取第一个scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '{if($0 ~ />chr1/) {a = "pass"}; if($0 ~ />/ && $0 !~ /chr1/) {a = "stop"}; if(a == "pass") {print $0}}' a.fa ## 提取chr1 >chr1 aattcc gg
002、提取中间任一scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '{if($0 ~ />chr3/) {a = "pass"}; if($0 ~ />/ && $0 !~ /chr3/) {a = "stop"}; if(a == "pass") {print $0}}' a.fa ## 提取chr3 >chr3 aatt gg
003、提取末尾scaffold
[root@PC1 test]# ls a.fa [root@PC1 test]# cat a.fa ## 测试数据 >chr1 aattcc gg >chr2 ttccggaa ggccttgg cc >chr3 aatt gg >chr4 ttccgg >chr5 aaccgg ttaa [root@PC1 test]# awk '{if($0 ~ />chr5/) {a = "pass"}; if($0 ~ />/ && $0 !~ /chr5/) {a = "stop"}; if(a == "pass") {print $0}}' a.fa ## 提取chr5 >chr5 aaccgg ttaa
004、连续提取任意scaffol
[root@PC1 test]# ls a.fa scaffold.list [root@PC1 test]# cat scaffold.list ## 测试数据 chr1 chr3 chr5 ## 利用循环结构提取 [root@PC1 test]# for i in $(cat scaffold.list); do awk -v x=$i '{if($0 ~ ">"x) {a = "pass"}; if($0 ~ />/ && $0 !~ x) {a = "stop"}; if(a == "pass") {print $0}}' a.fa >> result.fa; done [root@PC1 test]# ls a.fa result.fa scaffold.list [root@PC1 test]# cat result.fa ## 提取结果 >chr1 aattcc gg >chr3 aatt gg >chr5 aaccgg ttaa