我有一个大约 500 万行长的基因组数据文件,其中应该只包含字符 A、T、C 和 G。问题是,我知道文件应该有多大,但它比那个稍大一些。这意味着分析中出现了问题,或者某些行包含基因组数据以外的内容。
有没有办法找到除 A、T、C 或 G 之外的任何一行?由于文件的性质,不应出现任何其他字母、空格、数字、符号。我已经逐个符号搜索过,所以我希望有一种更简单的方法。
答案1
首先,您绝对不想在编辑器中打开该文件(它太大了,无法以这种方式进行编辑)。
相反,如果你只是想确认文件是否包含除、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
把它们全部删除。
答案2
我专注于标题
查找 VI 中任何除 ATCG 之外的行
我从 VI 编辑器中测试了这个,所谓的“最后一行模式”。
:%!tr -c -d 'ATCG\n
:
进入命令行模式,%
将整个文件作为一个范围进行匹配,通过恰好与 @Kusalananda 所写的外部命令相同的!
外部命令来过滤该范围:)。tr -c -d 'ATCG\n