Сортировка файла по входному значению в открывающей строке - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть файл с форматом ниже, мне нужно прочитать строки, начинающиеся с '>', и отсортировать строки по OS = в алфавитном порядке.

>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL

Требуемый вывод:

>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE

Пока мой код:

while read p;
if [[ $p == >* ]];
then
#what should I do here to sort the line by OS ? 

done <input.txt

1 Ответ

1 голос
/ 20 сентября 2019

Не могли бы вы попробовать следующее.

awk '
/^>/{
  if(val){
    print val}
    val=""
  }
  {
    val=(val?val "##":"")$0
  }
END{
    if(val){
      print val
    }
}' Input_file | sort -k2.4 | tr -s '##' '\n'

Объяснение: Учитывая, что ваш Input_file не содержит ##, иначе вы можете изменитьих к любой другой строке.По сути, я добавляю строки, начиная с > до последней строки, которые идут до следующего появления >, где я добавляю их в одну строку с помощью разделителя ## (вы могли бы изменить его, о котором я уже упоминал), затем сортируюих со 2-м полем, наконец, удалив ## с помощью команды tr для новой строки снова.

Вывод будет следующим (после запуска для предоставленных образцов):

>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...