Вы хотите удалить все символы новой строки из строк, которые не начинаются с заголовка fasta персонаж >
.
awk '/^[>;]/ { if (seq) { print seq }; seq=""; print } /^[^>;]/ { seq = seq $0 } END { print seq }' data.fa
Сценарий Awk - это
/^[>;]/ { if (seq) { print seq }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print seq }
... который будет делать три разные вещи в зависимости от того, что он найдет в файле.
>
) или строка комментария fasta (строка, начинающаяся с ;
): напечатайте любую последовательность, которую мы запомнили в seq
, если есть (относится к предыдущему заголовку). Очистите запомненную последовательность. Распечатать текущую строку (заголовок или комментарий). Если вы хотите сделать красивую печать последовательности, например, ограничьте ее до 60 символов в строке:
#!/usr/bin/awk -f
function pretty(s) {
p = "";
n = 1;
while (n < length(s)) {
p = (p ? p "\n" : "") substr(s, n, 60);
n += 60;
}
return p;
}
/^[>;]/ { if (seq) { print pretty(seq) }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print pretty(seq) }
Поместите это в prettyfasta.awk
и сделайте его исполняемым ( chmod + x prettyfasta.awk
), затем запустите его:
$ ./prettyfasta.awk data.fa