Со стандартнымsed
:
$ sed '/^>/{ s/[^:]*:/>/; s/:.*//; }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT
Это применяет две замены s/[^:]*:/>/
и s/:.*//
ко всем строкам в file.fa
, которые начинаются с>
(строки заголовка fasta ).
Первая замена заменит начало строки до первого символа :
включительно на >
.
Вторая замена удалит все, начиная с первого :
в результирующих данных (и второго :
в исходной строке )до конца строки.
Это оставило бы второе:
-поле с разделителями с префиксом >
.
Со стандартнымawk
:
$ awk -F ':' '/^>/ { $0 = ">" $2 } { print }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT
Это будет использовать :
в качестве разделителя полей, и при встрече со строкой, начинающейся с >
, она заменит полную строку на >
, за которой следует второе:
-поле с разделителем. Все строки, измененные или нет, будут напечатаны.