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

 

 

posted @ 2023-01-29 15:59  小鲨鱼2018  阅读(204)  评论(0编辑  收藏  举报