Найдите любую строку в VI, которая имеет что-то кроме ATCG

У меня есть файл геномных данных длиной около 5 миллионов строк, в котором должны быть только символы A, T, C и G. Проблема в том, что я знаю, насколько большим должен быть файл, но он немного больше. Это означает, что что-то пошло не так в анализе, или есть строки, которые содержат что-то кроме геномных данных.

Есть ли способ найти какую-либо строку, которая имеет что-то кроме A, T, C или G? Из-за характера файла, любые другие буквы, пробелы, цифры, символы не должны присутствовать. Я прошел поиск символа за символом, поэтому я надеялся, что будет более легкий путь.

Прежде всего, вы определенно не хотите открывать файл в редакторе (он слишком велик для редактирования).

Вместо этого, если вы просто хотите определить , содержит ли файл что-либо кроме A , T , C и G , вы можете сделать это с

 grep '[^ATCG]' filename 

Это вернет все строки, которые содержат что-либо кроме этих четырех символов.

Если вы хотите удалить эти символы из файла, вы можете сделать это с

 tr -c -d 'ATCG\n' newfilename 

(если это правильный способ «исправить» файл или нет, я не знаю)

Это удалит все символы в файле, которые не являются одним из четырех, и также сохранит символы новой строки ( \n ). Отредактированный файл будет записан в newfilename .

Если из-за систематической ошибки что-то добавлено в файл, это можно исправить с помощью sed или awk , но мы пока не знаем, как выглядят ваши данные.


Если у вас есть файл, открытый в vi или vim , то команда

 /[^ATCG] 

найдет следующий символ в буфере редактирования, который не является A , T , C или G

И :%s/[^ATCG]//g удалит их все.

Я сосредоточился на названии

Найдите любую строку в VI, которая имеет что-то кроме ATCG

И я проверил это из редактора VI, так называемого «режима последней строки».

:%!tr -c -d 'ATCG\n

: входит в режим командной строки, % соответствует всему файлу как диапазону ! фильтры, которые проходят через внешнюю команду tr -c -d 'ATCG\n которая совпадает с написанной @Kusalananda :).