Есть множество вопросов по SO, которые спрашивают:
Еще одна проблема с списком, разделенным запятыми, - обеспечить согласованность значений - сохранение текста означает возможность опечаток ...
Это все симптомы денормализованных данных и подчеркивают, почему вы всегда должны моделировать нормализованные данные. Денормализация может быть оптимизацией запроса, , которая будет применяться, когда сама на самом деле представится .
Благодаря объяснению @ kvantour для файлов fasta, вот еще одно решение sed, которое лучше подходит для вашей задачи:
sed '/^>/! s/[^ACTG]/N/g' file.fasta
/^>/!
: do следующее, если эта строка не начинается с >
, s/[^ACTG]/N/g
: заменяет каждый символ, но ACTG
на N
. Вот одно решение с awk
awk 'NR%2 ==0{gsub(/[^CTAG]/, "N")}1' file
результатом
SEQUENCE_1
AGCNGTNANTGCTG
SEQUENCE_2
AGGNGTNANTGCTC
Пояснение Как хотел OP, я только ищу каждую четную строку, чтобы применить изменение с помощью [ 1117]
NR/2 == 0
NR
- количество записей (строк здесь), прочитанных до тех пор, пока file
и gsub(/[^CTAG]/, "N")
не заменяются всеми символами, которые являются НЕ 'C', 'T', 'A', 'G'
[^CTAG]
^
есть отрицание
и awk
идет по expression
action
формат
здесь expression
равен NR/2==0
, и действие заменяет символы с N
на gsub
, которые не являются CTAG