2014-06-20 72 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