2014-06-20 46 views
1

我在生物信息学的工作,我需要在这看起来像大文件计算的模式,如GATTACCA:
“ATTTCCCGATCCGAG GATT(/ N)
ACCA CGTAGATGATACACGT(etc)“ 有没有办法让Grep忽略/ n换行符? 感谢您的帮助!用grep搜索超过multipile行模式

+0

你只是需要的数'GATT \ nACCA'发生?这个文件有多大? – Kent

+0

档案有多大?其次 - grep通过换行符识别,所以它不能匹配它。但是你可以使用“tr”来替换换行符和空格,但是再次,文件有多大? –

回答

1

我想这可能就是你所想要的东西:

tr -d '\n' < file | grep -o GATTACCA 

它(临时)从文件(使用tr及其-d选项删除)传递到grep之前移除换行。

+0

谢谢!这工作到目前为止最简单... 现在...任何想法如何解析成python? 我知道如何在python中使用简单的linux命令,但不知道如何管道... – MrJanx

1

你可以做到这一点通过awk和grep来算在你的文件的话GATTACCA的出现次数,

awk -v RS="\0" '{gsub (/\n/,""); print}' file | grep -o 'GATTACCA' | wc -l 

说明:

RS="\0"   # Turns the input file into a single record. 

gsub (/\n/,"")  # Removes all the \n character. 

grep -o 'GATTACCA' # From the awk output, it fetches the string GATTACCA and prints every match in a new line. 

wc -l    # To count the number of lines 
+0

您可以使用'grep -c'来计数而不是'wc'。 – terdon

+0

@terdon它显示不同的结果。 –

+0

为什么?不同的结果?现在要测试这个... – MrJanx

0

你已经有两个很好的通用答案。另一种方法是使用sed

perl -pe 's/\n//' file | grep -o GATACA 

但是,如果你在FASTA文件时,这可以是有趣:

#! /bin/sh 
gawk '{ 
     if (substr($1,1,1)==">") 
     if (NR>1) 
        printf "\n%s\t", substr($0,2,length($0)-1) 
     else 
      printf "%s\t", substr($0,2,length($0)-1) 
     else 
       printf "%s", $0 
}END{printf "\n"}' "[email protected]" 

上面的脚本改变FASTA格式TBL(SEQ IDsequence,所有在同一行上)。我经常用它来grepping:

FastaToTbl foo.fa | grep GATTACA 

我也有一个TblToFasta恢复原来的:

#! /bin/sh 
# tbl-to-fasta.awk transforms a tbl file into a fasta file, 60 columns per record 
# usage=gawk -f tbl-to-fasta TBL_FILE 


gawk '{ 
    sequence=$NF 

    ls = length(sequence) 
    is = 1 
    fld = 1 

    while (fld < NF) 
    { 
    if (fld == 1){printf ">"} 
    printf "%s " , $fld 

    if (fld == NF-1) 
     { 
     printf "\n" 
     } 
     fld = fld+1 
    } 

    while (is <= ls) 
    { 
    printf "%s\n", substr(sequence,is,60) 
    is=is+60 
    } 
}' "[email protected]" 
1

使用sedgrep

sed -n 'H;x;s/\n//g;/GATTACCA/p' input | grep -o GATTACCA 
+0

为什么'grep'?你的'sed'命令已经完成了它的工作。我错过了什么吗? – terdon

+0

可能有多次出现的模式。 – perreal

+0

啊,确实很好。 – terdon