Есть ли способ заменить все вхождения определенных символов, но только в каждой n-й строке?

Есть множество вопросов по SO, которые спрашивают:

  • как получить счет конкретных значений из списка, разделенного запятыми
  • , как получить записи, имеющие только одно и то же 2/3 / etc из этого списка с разделителями-запятыми

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

Это все симптомы денормализованных данных и подчеркивают, почему вы всегда должны моделировать нормализованные данные. Денормализация может быть оптимизацией запроса, , которая будет применяться, когда сама на самом деле представится .

2
задан mcfiston 25 March 2019 в 15:44
поделиться

2 ответа

Благодаря объяснению @ kvantour для файлов fasta, вот еще одно решение sed, которое лучше подходит для вашей задачи:

sed '/^>/! s/[^ACTG]/N/g' file.fasta
  • /^>/!: do следующее, если эта строка не начинается с >,
  • s/[^ACTG]/N/g: заменяет каждый символ, но ACTG на N.
0
ответ дан oguz ismail 25 March 2019 в 15:44
поделиться

Вот одно решение с 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

0
ответ дан JBone 25 March 2019 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: