Рейтинг:1

Как выбрать определенные столбцы в файле, чередуя строки

флаг af

У меня есть текстовый файл, содержащий строки информации о белковых последовательностях и связанных последовательностях.

>4YDY_1|Цепи A, C[auth B]|DARPIN 44C12V5|синтетическая конструкция (32630)
MRGSHHHHHGSDLGKKLLEAARAGQDDEVRILMANGADVNALDDSGYTPLHLAAEDGHLEIVEVLLKHGADVNAADRLGDTPLHLAAFVGHLEIVEVLLKAGADVNAVDLAGVTPLHVAAFYGHLEIVEVLLKAGADVNAQDKFGKTPADIAADNGHEDIAEVLQKLN

Для этих цепочек существует последовательность. Я хочу просмотреть каждую строку файла и сохранить только идентификатор и первую цепочку, удалить номер объекта, который находится сразу после идентификатора (_1), поставить запятую между идентификатором и цепочкой и удалить все остальные вещи в линия. Эта операция должна быть выполнена одной строкой да и одной нет. Также есть последовательности (буквы во второй строке), в которых меньше 50 букв. Я хочу удалить каждую последовательность, содержащую менее 50 букв, вместе с ее идентификатором, который является строкой над ней.

Чтобы было ясно, это вывод, который я ищу для каждой последовательности в файле:

>4YDY:А
MRGSHHHHHGSDLGKKLLEAARAGQDDEVRILMANGADVNALDDSGYTPLHLAAEDGHLEIVEVLLKHGADVNAADRLGDTPLHLAAFVGHLEIVEVLLKAGADVNAVDLAGVTPLHVAAFYGHLEIVEVLLKAGADVNAQDKFGKTPADIAADNGHEDIAEVLQKLN

Заранее спасибо.

флаг cn
Ray
Для того, что вы хотите сделать, вы, вероятно, захотите обратиться к Perl или Python. Возможно, кто-то еще может предложить вам помощь с `bash`, но я думаю, что это будет довольно сложно.
Рейтинг:0
флаг jp

Это проверено и работает с вашим примером.

#!/бин/баш
# Читаем файл по две строки за раз
пока читаешь -r один; делать
   читать -r два
   # Если вторая строка состоит из пятидесяти и более символов
   если ((${#two} >= 50)); тогда
     ЕСЛИ='|' читать -ra f <<< "$one"
     идентификатор = "$ {ф [0]}"
     # Убираем подчеркивание "_" и все что после него из ID
     идентификатор = $ {id% _ *}
     # Берём первую цепочку
     цепочка = "${f[1]}"
     chain=$(cut -d ' ' -f2 <<<"$ chain" | cut -d ',' -f1)
     один="$id:$цепочка" 
     # Печатаем две строки в нужном формате
     printf '%s\n' "$один" "$два"
   фи
сделано < файл.txt

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.