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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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中给数据加上行号