我有一个基因组数据文件,大约有500万行长,应该只有A,T,C和G的字符。问题是,我知道这个文件应该有多大,但它比这个稍微大一些。这意味着,某种分析出了问题,或者有一些线条包含了基因组数据以外的其他东西。
有没有办法找出除了A、T、C或G之外的任何线?由于文件的性质,任何其他字母、空格、数字、符号都不应该出现。我经历了一个又一个符号的搜索,所以我希望有一个更简单的方法。
发布于 2018-08-31 15:47:49
首先,您肯定不想在编辑器中打开文件(它太大了,无法用这种方式编辑)。
相反,如果您只想确定该文件是否包含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会把它们全部移除。
发布于 2018-08-31 23:21:39
我把重点放在标题上
查找VI中任何有ATCG以外的内容的行
我从VI编辑器中测试了这个,所谓的“最后一行模式”。
:%!tr -c -d 'ATCG\n
:进入命令行模式,%将整个文件匹配为一个范围,!过滤器通过外部命令tr -c -d 'ATCG\n筛选,该命令恰好与@Kusalananda相同)。
https://unix.stackexchange.com/questions/466068
复制相似问题