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 @   小鲨鱼2018  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-01-29 linux系统中awk命令
2021-01-29 linux系统中grep命令
2021-01-29 linux系统sed命令删除前几个字符、后几个字符及特定字符前后字符
2021-01-29 linux系统中sed命令在数据中插入文件
2021-01-29 linux系统中sed复合命令
2021-01-29 linux系统sed命令输出匹配字符的行及其后若干行
2021-01-29 linux中给数据加上行号
点击右上角即可分享
微信分享提示