используя команды sed для удаления всех чисел в указанной строке c - PullRequest
1 голос
/ 21 января 2020

Это может существовать в другом месте, но я не смог его найти. Моя цель состоит в том, чтобы удалить дополнительные числа из поиска, чтобы извлечь данные последовательности, сохраняя при этом числовой идентификатор последовательности. Например,

Orginal:

>k141_100041 flag=0 multi=242.9841 len=43238
Sbjct  16375  MSEELTQNSGSNYSASSIQVLEGLEAVRKRPAMYIGDISEKGLHHLVYEVVDNSIDEALA  16196
Sbjct  16195  GYCTHIEVTINEDNSITVQDNGRGIPVDFHEKEKKSALEVVMTVLHAGGKFDKGSYKVSG  16016
Sbjct  16015  GLHGVGVSCVNALSTHMTTNVFRNGKIYQQEYECGKPLYAVKEVGTTDITGTRQTFWPDG  15836
Sbjct  15835  SIFTVTEYKYSILQARMRELAYLNKGITITLTDKRVKEEDGSYKQEKFHSEEGVKEFVRF  15656
Sbjct  15655  LNSNNTPLIDDVIYLNTEKQGIPIECAIMYNTGFRENLHSYVNNINTIEGGTHEAGFRMA  15476
Sbjct  15475  LTRVLKKYAEESKALEKAKVEISGEDFREGLIAVISVKVSEPQFEGQTKTKLGNNEVSGA  15296
Sbjct  15295  VNQAVGEALTYYLEEHPKEAKIIVDKVVLAATARVAARKARESVQRKSPMGGGGLPGKLA  15116
Sbjct  15115  DCSSRVAEECELFLVEGDSAGGSAKQGRSRQFQAILPLRGKILNVEKAMWHKAFESDDVN  14936
Sbjct  14935  NIIQALGVRFGVDGEEDSKKANIDKLRYHKVIIMTDADVDGSHIDTLIMTLFYRYMPEVI  14756
Sbjct  14755  QGGHLYIATPPLYKCSKGKISEYCYTDEARQAFIQKYGEGNEQGIHTQRYKGLGEMNPEQ  14576
Sbjct  14575  LWETTMNPETRILKQVNIENAAEADYIFSMLMGDDVGPRREFIEKNATYANIDA  14414

Цель:

>k141_112817 flag=0 multi=66.5284 len=335023
MSEELTQNSGSNYSASSIQVLEGLEAVRKRPAMYIGDISEKGLHHLVYEVVDNSIDEALA
GYCTHIEVTINEDNSITVQDNGRGIPVDFHEKEKKSALEVVMTVLHAGGKFDKGSYKVSG
GLHGVGVSCVNALSTHMTTNVFRNGKIYQQEYECGKPLYAVKEVGTTDITGTRQTFWPDG
SIFTVTEYKYSILQARMRELAYLNKGITITLTDKRVKEEDGSYKQEKFHSEEGVKEFVRF
LNSNNTPLIDDVIYLNTEKQGIPIECAIMYNTGFRENLHSYVNNINTIEGGTHEAGFRMA
LTRVLKKYAEESKALEKAKVEISGEDFREGLIAVISVKVSEPQFEGQTKTKLGNNEVSGA
VNQAVGEALTYYLEEHPKEAKIIVDKVVLAATARVAARKARESVQRKSPMGGGGLPGKLA
DCSSRVAEECELFLVEGDSAGGSAKQGRSRQFQAILPLRGKILNVEKAMWHKAFESDDVN
NIIQALGVRFGVDGEEDSKKANIDKLRYHKVIIMTDADVDGSHIDTLIMTLFYRYMPEVI
QGGHLYIATPPLYKCSKGKISEYCYTDEARQAFIQKYGEGNEQGIHTQRYKGLGEMNPEQ
LWETTMNPETRILKQVNIENAAEADYIFSMLMGDDVGPRREFIEKNATYANIDA

Я могу легко удалить строку 'Sbjct' и числа с помощью команд sed, но я не могу знать, как освободить строку id (k141_112817 ...) из команд sed. Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 22 января 2020

Я думаю, sed - неправильный инструмент, так как кажется, что вы хотите:

awk '/^Sbjct/{$0 = $3}1' input-file
0 голосов
/ 22 января 2020

Это может сработать для вас (GNU sed):

sed -E '/^Sbjct/s/.* .* (\S+) .*/\1/' file

При обнаружении строки, начинающейся с Sbjct, удалите первые два поля и последнее (и промежуточные пробелы).

Это разрешимо, но в этом случае я согласен с Уильямом Перселлом и буду использовать Awk.

0 голосов
/ 22 января 2020
sed -E '/^>/n;s/\S+\s*//4;s///2;s///1' file

GNU sed с -E для расширенного регулярного выражения

  • /^>/n для сохранения строки, начинающейся с > (с использованием команды n)
  • s/\S+\s*//4 удалить 4-е слово. \S не является пробелом
  • s///2 для удаления 2-го слова (пустое совпадение в подстановке будет использовать предыдущее совпадение)
  • s///1 для удаления 1-го слова
...