You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

从大型FASTA文件提取前50条最长转录本并保存至指定目录

提取FASTA文件中前50条最长转录本并迁移的解决方案

我有一个包含10万多条转录本的大型FASTA文件,想要从中提取前50条最长的转录本。通过以下awk命令可以得到按长度从长到短排序的转录本名及对应长度:

awk -vRS=">" -vORS="\n" -vFS="\n" -vOFS="\t" '
NR>1 {a=$1; $1 = ""; print a, length($0)-NF+1}
' /storage/data/sample/filename.fasta

确认前50条转录本的长度均超过8100后,我编写了筛选命令,但需要完成两个操作:1)将筛选结果保存为单个FASTA文件;2)将该文件移动至/station/work/目录。同时要求不改动原文件、不复制整个大文件,且避免生成多个单独的FASTA文件。

解决方案

方法一:先提取保存再移动

  1. 执行以下awk命令,提取前50条符合长度要求的转录本并保存为单个文件:
awk -vRS=">" -vORS="" -vFS="\n" -vOFS="\n" '
NR>1 {
    a=$0; 
    $1=""; 
    seq_len = length($0)-NF+1;
    if(seq_len>8100) {
        print ">"a;
        count++;
        if(count>=50) exit; # 找到50条后立即退出,提升处理效率
    }
}' /storage/data/sample/filename.fasta > top50_longest_transcripts.fasta
  1. 将生成的文件移动到目标目录:
mv top50_longest_transcripts.fasta /station/work/

方法二:直接生成到目标目录(一步到位)

无需额外移动操作,直接将输出写入目标路径的文件:

awk -vRS=">" -vORS="" -vFS="\n" -vOFS="\n" '
NR>1 {
    a=$0; 
    $1=""; 
    seq_len = length($0)-NF+1;
    if(seq_len>8100) {
        print ">"a;
        count++;
        if(count>=50) exit;
    }
}' /storage/data/sample/filename.fasta > /station/work/top50_longest_transcripts.fasta

说明

  • 上述命令通过count变量控制只提取前50条符合条件的序列,找到后立即退出,无需遍历整个大文件,处理效率更高。
  • 输出结果会被写入单个FASTA文件,不会生成多条序列各自单独的文件。
  • 整个过程不会修改原FASTA文件,仅读取必要内容并输出目标序列。

示例短序列

>scaffold_144150_c1
CCCCAGAATTCTGGGAGCTCGGCTATGGACTCCAATACAGCCCTTTGACGGGGACGGAACATCGGCAATGACTTAGGACCAAGAACCCGAGCATATTCGACAAAATTCTTGTCGCTTATGCTACGCCACTTAACAGTGGGAATAACGGATTCTGGTGTAATAATCTTGCCTGCAAACTCGGCTATCCTTCCCGAGATAGT
>scaffold_144149_c1
CGCCCTGGAGGGTCACGGTCACGAAGACCGGCATGGCAAACAGGGCGAAAAGCCCGCTCAGATAGAACAGCGTGGACACGAGACCGGCCAGGACCGGATGCTCGCTCAGCTGAACGACGAATCTTCGGAACACGCCCGCTCTCAGCGCGGAGAAGCGTTCGGGGACGAGCCCGGCGGACTTCCTCAGAAACGTCCATGG
>scaffold_144148_c1
ACAGTTACAGGCTGAATTACTATTACTGGATAATTAGCAGTATTGCCGTTTGAGCCTGTAACACTAATAGTGCCGAATGCCATACCTAAAGAATTTGAGCCCGCTGTAAATGGATTTTTTAAATCCAATACACCGTTTATACCAGCCTGATACATACTAACTAAACAGCCATCAGTTGCGTTTGCTTGGGATGGAAACTG
>scaffold_144147_c1
GTGACGTTAGCATGTCCCGTTGCATTCAGTGTCACATTTGAAAGATACACGTAGAAGTGTACTGTGGAACCTATTGCAACAGTTTCAGATGTCGGTATCAGGAAAACCTGTAAATGCTGTGAAAGGACTATAATGGTGAGATTCGCATATGCTACGTTTCCAACGTTGTCAGTTATTTTCAGTTCAAAATGATAAGTTCC
>scaffold_144146_c1
ACAGAACATATGGTAATGTAACGAGTGCATCTTCCATTACAGGAAATTATGGATCTTCATATGCGTTCACGATAAGTGCATCTGGAACTTACACAGTCGTTGTCGTAACCAATGTCAATCAAAATGCCACACAGACAGAAGCGCCATGGGTTGTTAAGATAGACAACTCTTTGCCTTCATTAAAACTTCTACCAGCAACG
>scaffold_144145_c1
ATCTTGCTGTAGGAGAGGAGAACGGCGAGTTCGGGACGCGTGAATCCCTTGCCGAGGGCCCGGCGCGCGGCGAGCTCGTCGCCCGTCGGGAGCCCCTCGAGCTGACGCTGGAGGAGACCCTGACGCTCGAGCTGACGCATGAGAAAGACGTGTTCGTCGAACCGCGCCGGGGCGTAGGCGTTGGCGAGCGCGAGCGCGAG
>scaffold_144144_c1
GCAGGAAAGACCGCTCTCGACGATCTTGTGACCGTCATCACGGGGCCATTCCGGTTCCGCTTCAAGGTCAACAACAAGGTCTACTACGAGGACAGCCCGCTTGCTGCTCTTCCTCCGCACTACAGCTTCGGGTCTTCGCAGGCGGCAACCACGACGGCTACTACGACTACGGTTGTCGGCGGCTACGGGTCGGTCACAGG
>scaffold_144143_c1
ACTGTGACTGGTGATTCCGGTACAAGCCCAGTGACTGTTTCAGTTATACCAGGCTCAGGCACCGTCACATATTCAGGTGAATCAATAGTTACGAGCACTTCTTACTTTGCACAGGGCACAACAACCCCAGTAGTATCGTCTGAATCACCGTCCTCGGCCGGAACATACACATACCCACTTTACGTGGTATTTACAGGTGT
>scaffold_144142_c1
CAACCTTATACAATCTGGTTATATCACCATATCTATGCCATCAACCGCTTCTATAGCAAGTATAAGCGTTCTGAACACAAGCGCCAGCTGTCCAACAAACGGCATATTAACATCTACAAGCACTCCCAATGTGTATTACATAAACTTAGCAACACTAGCATCGTTGTGTACAGGTCTCACTCCAACAGCATGGCAATCTG
>scaffold_144141_c1
CAACCTTATACAATCTGGTTATATCACCATATCTATGCCATCAACCGCTTCTATAGCAAGTATAAGCGTTCTGAACACAAGCGCCAGCTGTCCAACAAACGGCATATTAACATCTACAAGCACCCCCAATGTGTATTACATAAACTTAGCAACACTAGCATCGTTGTGTACAGGTCTCACTCCAACAGCATGGCAATCTG

内容的提问来源于stack exchange,提问作者deliza123

火山引擎 最新活动