使用awk或sed将SAM文件发送到FASTA?

时间:2015-01-21 12:23:25

标签: awk sed bioinformatics fasta

sam文件的示例如下:

@SQ SN:gi|669687444|gb|KJ769480.1|  LN:1200
@SQ SN:gi|669687442|gb|KJ769479.1|  LN:900
@SQ SN:gi|669687440|gb|KJ769478.1|  LN:1162
@SQ SN:gi|669687438|gb|KJ769477.1|  LN:1074
@SQ SN:gi|669687436|gb|KJ769476.1|  LN:1194
@SQ SN:gi|669687434|gb|KJ769475.1|  LN:1074
@SQ SN:gi|669687432|gb|KJ769474.1|  LN:1194
@SQ SN:gi|669687430|gb|KJ769473.1|  LN:1074
@SQ SN:gi|669687428|gb|KJ769472.1|  LN:1194
@SQ SN:gi|669687426|gb|KJ769471.1|  LN:1189
@SQ SN:gi|669687424|gb|KJ769470.1|  LN:1074
@SQ SN:gi|669687422|gb|KJ769469.1|  LN:370
@PG ID:bwa  PN:bwa  VN:0.7.10-r789  CL:bwa mem /ibers/ernie/home/thh32/Scratch/Hidden_virome/Against_NCBI_viral/Sweetspot/bwa_NCBI_viral_nucl test.fa
Rank10_clean_2213:4:1101:3636:2018  4   *   0   0   *   *   0   0   AAACCATTCGCTTCCTTTAAATCTATCTGTTATTTCCCTTAAATAATTTGAACCATGCGAAGCAATATAAGGATTTAAGACGAAACAATTCTTTTCTCT *   AS:i:0  XS:i:0
Rank10_clean_2213:4:1101:3508:2062  4   *   0   0   *   *   0   0   TCGCTATGCTTACTCCAATGTGGCGTACCAGTGTGCGAAGCTGATGCGCAAACCACGGGAAAAGGAGAAACTCTATCGGTGGATCGTGGATATGGAATTCAAATCCGGTGAGATCCC   *   AS:i:0  XS:i:0
Rank10_clean_2213:4:1101:1470:2237  4   *   0   0   *   *   0   0   GCGGAGCATATCCCCTTGCGTCCTGGACGGCGTGCCCGCATTCATGGGCGGCCACGGCCGCAGCTGCGATGGAATTCATCCCATACACGCTTTCTGAAAGGTTTACGGTCTTGCTCCTGGGATCG   *   AS:i:0  XS:i:0
Rank10_clean_2213:4:1101:1540:2114  4   *   0   0   *   *   0   0   GCGCGCAAGGTCCCGCGGATACTGGTCTGCCATATCTCCAACCCGCCCCTTAAGCGTGATGACGAAATGATCTACCCGAAAAGCTCAGCCGGGTTCCATCCCGGCAACGACGCGCCGCG *   AS:i:0  XS:i:0

通缉输出是:

>Rank10_clean_2213:4:1101:7988:2027 
GCCATCTCCAACCTCACCACCGGTAGCGGCAACCAGATGAGCTACAACCTCATCGCCATCCTTTGCGGCTTGATCGCCATGGCCGTCACCGCAATCTGCGCTCACTACGGCAAAAAGACCGTCAGCTTAATCCCATTCGTCCTTGGCATGTGCGCCGGTTATGTCGCGGCC
>Rank10_clean_2213:4:1101:6459:2053 
TCACCACTTATTGCATCACCATACACATCAGTTACTGTGATTGTTACTGTGATGTTACCATCGATAGAGGGGTTATAATCTGAACATTCAATGTTTGGTATACTTGTGCTTAACAAAGTAACATCAGATTTCAATGTGTCAATTCTGCTATCCCCTGTTTGAGTATTACTCCCCCAAACCT
CTGTATTCAAGTTACTAATCTTCGGTGTGACATCTCTGCTAATCACACTTGCCACA
>Rank10_clean_2213:4:1101:7962:2142
CGGTCCACCGAGAAAGGATGCTCCCTCAAAGCCTCAGATAGCGAAGGTGGAGACAGGACAAAAGAAGAAACCCCCCCCCCCACCCCCCCCC
>Rank10_clean_2213:4:1101:8018:2112 
GTGAAACGCCTCGCCGACTCTCTCCGCCACCCGGTAATAGCCGTGGGTGTACGGATCAAACGCAATGGCGTCCACAAGAGACATATCGACCTTGTCACCGGCCATGACGCGCTCGTCTGCCGTGACATTGACGACCTTGCCGATGACGCCGAC
>Rank10_clean_2213:4:1101:2807:2211 
TGAAAGTTGACATAGGAACCTGTGGAAGCATTGTAGTTAATGAGCGTTTTTTTTAAGTCATCAAAGTTATTTTTTAAGTTATGACGGCGGATATAATCCTGGAACTTGGGATTGACTATCCATTTATCAAAACACTGATCAAGAACAGTGCTTTGAATAAGCTCAGGTGAAGCATTGACTT
CAAATCCTGGCATAACACCTACAAGATAGCCATATTTCTCAAGTAATGCCT

我之前从未使用过sed或awk,我对它们的工作原理感到困惑,所以如果有人能解释如何做到这一点会很棒。

谢谢, 汤姆

2 个答案:

答案 0 :(得分:3)

使用@删除以sed d开头的行,如下所示:sed '/^@/d' d代表删除,斜杠之间的部分是匹配的正则表达式(即开头)行^后跟@)。然后使用如下替换格式化其他行:sed 's/^\([^ ]*\)[^ATGC]*\([ATGC]*\)[ :*a-zA-Z0-9]*$/>\1\n\2/'。此命令将在A,T,G或Cs序列之前粘贴换行符。并在原始行前添加>\(\)之间的部分是捕获的组,可以使用\1\2替换,具体取决于捕获的组的索引。 sed命令将查找一行的开头,后跟一些非空格(即输出的奇数行)。然后,从下一个空格开始,它将寻找许多非AGTC字符,直到出现一串AGTC。我们将在一组(第2组)中捕捉到这个序列。在此序列之后,可以有多个空格,字母字符和诸如此类([ :*a-zA-Z0-9]),直到该行的末尾匹配$。我们现在只取第一组和第二组,并在它们之间粘贴换行符/\1\n\2/

现在你所要做的就是插入maxscore数据等。我似乎无法找到你从哪里得到这些信息。

假设输入位于名为sam的文件中:

$ sed '/^@/d; s/^\([^ ]*\)[^ATGC]*\([ATGC]*\)[ :*a-zA-Z0-9]*$/>\1\n\2/' sam
>Rank10_clean_2213:4:1101:3636:2018
AAACCATTCGCTTCCTTTAAATCTATCTGTTATTTCCCTTAAATAATTTGAACCATGCGAAGCAATATAAGGATTTAAGACGAAACAATTCTTTTCTCT
>Rank10_clean_2213:4:1101:3508:2062
TCGCTATGCTTACTCCAATGTGGCGTACCAGTGTGCGAAGCTGATGCGCAAACCACGGGAAAAGGAGAAACTCTATCGGTGGATCGTGGATATGGAATTCAAATCCGGTGAGATCCC
>Rank10_clean_2213:4:1101:1470:2237
GCGGAGCATATCCCCTTGCGTCCTGGACGGCGTGCCCGCATTCATGGGCGGCCACGGCCGCAGCTGCGATGGAATTCATCCCATACACGCTTTCTGAAAGGTTTACGGTCTTGCTCCTGGGATCG
>Rank10_clean_2213:4:1101:1540:2114
GCGCGCAAGGTCCCGCGGATACTGGTCTGCCATATCTCCAACCCGCCCCTTAAGCGTGATGACGAAATGATCTACCCGAAAAGCTCAGCCGGGTTCCATCCCGGCAACGACGCGCCGCG

答案 1 :(得分:2)

使用awk的解决方案

awk '/^@/{ next; } { print ">"$1; print $10 }' input.sam

你得到了

>Rank10_clean_2213:4:1101:3636:2018
AAACCATTCGCTTCCTTTAAATCTATCTGTTATTTCCCTTAAATAATTTGAACCATGCGAAGCAATATAAGGATTTAAGACGAAACAATTCTTTTCTCT
>Rank10_clean_2213:4:1101:3508:2062
TCGCTATGCTTACTCCAATGTGGCGTACCAGTGTGCGAAGCTGATGCGCAAACCACGGGAAAAGGAGAAACTCTATCGGTGGATCGTGGATATGGAATTCAAATCCGGTGAGATCCC
>Rank10_clean_2213:4:1101:1470:2237
GCGGAGCATATCCCCTTGCGTCCTGGACGGCGTGCCCGCATTCATGGGCGGCCACGGCCGCAGCTGCGATGGAATTCATCCCATACACGCTTTCTGAAAGGTTTACGGTCTTGCTCCTGGGATCG
>Rank10_clean_2213:4:1101:1540:2114
GCGCGCAAGGTCCCGCGGATACTGGTCTGCCATATCTCCAACCCGCCCCTTAAGCGTGATGACGAAATGATCTACCCGAAAAGCTCAGCCGGGTTCCATCCCGGCAACGACGCGCCGCG

来自文档sam format,如果你在第二列中有标记8是未编码序列,那就更好了

awk '/^@/{ next; } 
    { if(and(int($2),8)){ 
        next; 
      } 
      print ">"$1; 
      print $10 }' input.sam

awk '/^@/{ next; } and(int($2),8){next;} { print ">"$1; print $10 }' input.sam