Извлечение информации в квадратных скобках для строки в текстовом файле, начинающейся с> - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть много текстовых файлов, которые выглядят так:

>CAA97360; SPAC26F1.03 [SCHPO]
M-----FRTCTKIGTVPKVLVNQKGLIDGLRRVTTDATTSRANPAHVPEEHDKPFPVKLD
DSVFEGYKIDVPSTEIEVTKGELLGLYEKMVTIRRLELACDALYKAKKIRGFCHLSIGQE

Я хочу извлечь информацию в квадратных скобках и сохранить последовательность M ---- FRT и т. Д. Ниже.Поэтому я хочу, чтобы текст выглядел так:

>SCHPO
M-----FRTCTKIGTVPKVLVNQKGLIDGLRRVTTDATTSRANPAHVPEEHDKPFPVKLD
DSVFEGYKIDVPSTEIEVTKGELLGLYEKMVTIRRLELACDALYKAKKIRGFCHLSIGQE

Как я могу это сделать с помощью терминала, пожалуйста?

1 Ответ

0 голосов
/ 21 ноября 2018

С AWK попробуйте что-то вроде:

gawk '{print gensub(/^>.*\[(.+)\]/, ">\\1", 1)}' text

, который выводит:

>SCHPO
M-----FRTCTKIGTVPKVLVNQKGLIDGLRRVTTDATTSRANPAHVPEEHDKPFPVKLD
DSVFEGYKIDVPSTEIEVTKGELLGLYEKMVTIRRLELACDALYKAKKIRGFCHLSIGQE

Пояснения:

  • The awk функция gensub() ищет в строке (по умолчанию $0, текущая строка) регулярное выражение (1-й аргумент) и заменяет совпадающую строку на 2-й аргумент.(Обратите внимание, что это очень грубый обзор функции gensub(). Подробные объяснения см. На странице man.)
  • Регулярное выражение /^>.*\[(.+)\]/ соответствует строке, которая начинается с '>', за которой следуют некоторыесимволы и подстрока, заключенная в квадратные скобки.Обратите внимание на скобки вокруг шаблона в квадратных скобках.
  • Что касается 2-го аргумента, \\1 (крайний левый обратный слеш просто избегает следующего) указывает на 1-е выражение в скобках в регулярном выражении выше.Он называется back reference, и вы можете повторно использовать соответствующую подстроку (в данном случае информацию в квадратных скобках) с этим механизмом.
  • Если шаблон соответствует, gensub() возвращает измененную строку.В противном случае он возвращает исходную строку.Поэтому просто сказать, что print gensub() ... работает как для совпавших, так и для несопоставленных линий.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...