我想用Unix的grep來搜索文件中的特定序列。這些文件通常非常大(〜1Gb)'A','T','C'和'G'。這些文件也包含許多行,每行都是一個60字的字。我遇到的問題是,當我在這些文件中搜索特定的序列時,grep將返回單行上發生的模式的結果,但是如果模式跨越一行(在中間的某處存在換行符),則不會。例如:使用grep來搜索DNA序列文件
使用
$ grep -i -n "GACGGCT" grep3.txt
要搜索的文件grep3.txt(我把目標「GACGGCT在雙星)
GGGCTTCGA**GACGGCT**GACGGCTGCCGTGGAGTCT
CCAGACCTGGCCCTCCCTGGCAGGAGGAGCCTG**GA
CGGCT**AGGTGAGAGCCAGCTCCAAGGCCTCTGGGC
CACCAGGCCAGCTCAGGCCACCCCTTCCCCAGTCA
CCCCCCAAGAGGTGCCCCAGACAGAGCAGGGGCCA
GGCGCCCTGAGGC**GACGGCT**CTCAGCCTCCGCCCC
返回
3:GGGCTTCGAGACGGCTGACGGCTGCCGTGGAGTCT
8:GGCGCCCTGAGGCGACGGCTCTCAGCCTCCGCCCC
所以,我的問題在於grep
找不到跨越第2行末尾的GACGGCT
,軋花的第3行。
我該如何使用grep來查找可能包含或可能不包含換行符的任何位置的目標序列?或者我怎麼能告訴grep
忽略目標字符串中的換行符?有沒有簡單的方法來做到這一點?
你怎麼知道那裏的序列啓動和停止?例如,一個序列只能有40個字符,然後在40個字符序列後中斷。如果你忽略換行符,那麼grep將只返回整個文件作爲一個單一的發現條目。 –
+1以上評論;同樣,grep結果看起來毫無意義,因爲它們表示序列的隨機部分(除非整個文件是單個序列)。 –
如果文件包含單個字符串,則可以通過刪除\ n來組合這些行,例如用'tr -d'\\''< inputfile > tempfile' – wildplasser