Добавьте длину следующей строки к текущей строке в bash - PullRequest
0 голосов
/ 30 августа 2018

У меня есть небольшой набор данных выборки test1.faa

>PROKKA_00001_A1@hypothetical@protein
MTIALHLTAVLAFAALAGCGANDSDPGPGGVTVSEARALDQAAEMLEKRGRSPADENAEQAERLRREQAQARTPGQPPEQALQQDGASAPE
>PROKKA_00002_A1@Cystathionine@beta-lyase
MHRFGGMVTAILKGGLDDARRFLERCELFALAESLGGVESLIEHPAIMTHASVPREIREALGISDGLVRLSVGIEDADDLLAELETALA
>PROKKA_00003_A1@hypothetical@protein
MVPIVSAAPVFTLLLTVAVFRRERLTAGRIAAVAVVVPSVILIALGH

и я хотел бы добавить длину следующей строки к строке заголовка, за которой следует следующая строка, например

>PROKKA_00001_A1@hypothetical@protein_92
MTIALHLTAVLAFAALAGCGANDSDPGPGGVTVSEARALDQAAEMLEKRGRSPADENAEQAERLRREQAQARTPGQPPEQALQQDGASAPE

Я пытался сделать это с помощью awk, но он возвращает следующую ошибку:

awk: >PROKKA_00001_A1@hypothetical@protein: No such file or directory

Я полагаю, это связано с > в начале? Но мне это нужно в выходном файле.

Это код, который я пробовал:

#!/bin/bash

cat test1.faa | while read line
do
  headerline=$(awk '/>/{print $0}' $line)
  echo -e "this is the headerline \n ${headerline}"
  fastaline=$(awk '!/>/{print $0}' $line)
  echo -e "this is the fastaline \n ${fastaline}"
  fastaline_length=$(awk -v linelength=$fastaline '{print length(linelength)}')
  echo -e "this is length of fastaline \n ${fastaline_length}"
  echo "${headerline}_${fastaline_length}"
  echo $fastaline
done

Есть предложения, как это сделать?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

эта команда awk сделает то, что вы хотите

awk '
    /^>/ {
        getline next_line
        print $0 "_" length(next_line)
        print next_line
    }
' test1.faa
0 голосов
/ 30 августа 2018

Не могли бы вы попробовать следующее (учитывая, что ваш фактический Input_file такой же, как показано в примере).

awk '/^>/{value=$0;next} {print value"_"length($0) ORS $0;value=""}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...