代码之家  ›  专栏  ›  技术社区  ›  MAPK

在Linux中将tab转换为fasta格式

  •  2
  • MAPK  · 技术社区  · 6 年前

    我有文字( infile-table.txt )文件有两列,用如下制表符分隔:

    TRINITY_DN5561_c0_g1_i1 len=391 path=[369:0-390] [-1, 369, -2]  TTGGCTGGAATTCAAAAGCTTTCGATT
    TRINITY_DN15396_c0_g1_i1 len=235 path=[213:0-234] [-1, 213, -2] CGAGCTTGGGTAAATGGGATCAAACTAGATTA
    len=298 path=[1:0-297] [-1, 1, -2]  GCTGTGATTTCTGCCATCGGAGAGGGCACAGACGGC
    

    我想把它们转换成这样:

    >TRINITY_DN5561_c0_g1_i1 len=391 path=[369:0-390] [-1, 369, -2] 
    TTGGCTGGAATTCAAAAGCTTTCGATT
    >TRINITY_DN15396_c0_g1_i1 len=235 path=[213:0-234] [-1, 213, -2]    
    CGAGCTTGGGTAAATGGGATCAAACTAGATTA
    >len=298 path=[1:0-297] [-1, 1, -2] 
    GCTGTGATTTCTGCCATCGGAGAGGGCACAGACGGC
    

    我试过但不起作用的命令:

    awk '{printf ">%s\n%s\n",$1,$2}' infile-table.txt > outfile.fasta
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   glenn jackman    6 年前

    您只是缺少“制表符分隔”位:

    awk -F '\t' '{printf ">%s\n%s\n",$1,$2}' infile-table.txt
    #...^^^^^^^
    

    如果您愿意,可以将awk程序简化一点:设置 输出 字段分隔符到换行符,并且:

    awk -F'\t' -v OFS='\n' '{$1 = ">" $1} 1' infile-table.txt 
    

    当您更改第一个字段时,awk将使用ofs重新创建$0,后面的“1”将打印记录。

    而且,自从你添加了 标签:

    sed 's/^/>/;s/\t/\n/' infile-table.txt
    
        2
  •  0
  •   Diego Mariano    6 年前

    使用Python!创建一个名为“extract.py”的文件:

    lines = open("infile-table.txt").readlines()
    
    for line in lines:
        cols = line.split("\t")
        print(">"+cols[0]+"\n"+cols[1])
    

    然后,在终端中运行:“python extract.py”。

    推荐文章