Сохранение символов между двумя определенными символами в заголовках fasta и удаление остальных

Используйте awkс несколькими разделителями.

 awk -F"[\" \t]" '{print $1,$11,$14,$20,$40}' infile.txt 
0
13.09.2019, 19:10
5 ответов

Предлагаемое решение:

With GNU sed

cut -f2 -d':' file | sed '1~2s/^/>/'

Выход:

>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT
0
28.01.2020, 02:29

Сawk:

awk -F: '{ if (NF==1) { print } else { print ">"$2 } }' file

или немного сжатее

awk -F: '{ print (NF==1) ? $1 : ">"$2 }' file

Используйте разделитель полей :и напечатайте первое поле, если в строке только одно поле, и напечатайте >и второе поле в противном случае.

Сsed:

sed 's/^>[^:]\+:\([^:]\+\).*/>\1/' file
1
28.01.2020, 02:29

Со стандартным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

Это будет использовать :в качестве разделителя полей, и при встрече со строкой, начинающейся с >, она заменит полную строку на >, за которой следует второе:-поле с разделителем. Все строки, измененные или нет, будут напечатаны.

1
28.01.2020, 02:29
$ awk -F':' '{$0 = (NF>1 ? ">"$2 : $0)} 1' file
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

$ awk -F':' '{sub(/>.*/,">"$2)}1' file
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT
0
28.01.2020, 02:29

Существует множество способов обращения с этим ПБМ, некоторые из них:

$ cut -d: -f2 | sed -e '$!N;s/^/>/' file

$ awk -F: '/^>/{$0 = ">" $2}1' file

$ perl -F: -pale ' s/^>\K.*/$F[1]/' file

$ sed -e '
   /\n/{P;d;}
   /^>/y/:/\n/
   s/\n/&>/;//D
' file

Результаты

>TRINITY_DN10034_c0_g1_i1 
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2 
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT
0
28.01.2020, 02:29

Теги

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