Linux
在 VI 中查找除 ATCG 之外的任何行
我有一個大約 500 萬行長的基因組數據文件,其中應該只有字元 A、T、C 和 G。問題是,我知道文件應該有多大,但它比那個大一點。這意味著,分析中出現了問題,或者有些行包含基因組數據以外的內容。
有沒有辦法找到除 A、T、C 或 G 以外的任何行?由於文件的性質,不應出現任何其他字母、空格、數字、符號。我已經逐個符號地搜尋了符號,所以我希望有一種更簡單的方法。
首先,您絕對不想在編輯器中打開文件(這樣編輯太大了)。
相反,如果您只想確定文件是否包含除
A
、和之外的任何內容T
,則可以使用C``G
grep '[^ATCG]' filename
這將返回包含除這四個字元之外的任何內容的所有行。
如果你想從文件中刪除這些字元,你可以這樣做
tr -c -d 'ATCG\n' <filename >newfilename
(如果這是“更正”文件的正確方法,我不知道)
這將刪除文件中不屬於這四個字元之一的所有字元,並且還會保留換行符 (
\n
)。編輯後的文件將被寫入newfilename
.如果是系統錯誤向文件中添加了某些內容,那麼這可能會被
sed
或糾正awk
,但我們還不知道您的數據是什麼樣的。如果您在
vi
或中打開文件vim
,則命令/[^ATCG]
將在編輯緩衝區中找到下一個不是
A
、T
或C
的字元G
。並將
:%s/[^ATCG]//g
全部刪除。