Спасательная ценность второй строки

После запуска скрипта у меня есть следующие строки:


PyMOL(TM) Molecular Graphics System, Version 1.4.1. Copyright (c) Schrodinger, LLC. All Rights Reserved. Created by Warren L. DeLano, Ph.D. PyMOL is user-supported open-source software. Although some versions are freely available, PyMOL is not in the public domain. If PyMOL is helpful in your work or study, then please volunteer support for our ongoing efforts to create open and affordable scientific software by purchasing a PyMOL Maintenance and/or Support subscription. More information can be found at "http://www.pymol.org". Enter "help" for a list of commands. Enter "help <command-name>" for information on a specific command. Hit ESC anytime to toggle between text and graphics. Command mode. No graphics front end. Detected 8 CPU cores. Enabled multithreaded rendering. PyMOL>align MHC1, MHC2 Match: read scoring matrix. Match: assigning 385 x 384 pairwise scores. MatchAlign: aligning residues (385 vs 384)... ExecutiveAlign: 3810 atoms aligned. Executive: RMS = 0.000 (3810 to 3810 atoms) PyMOL>sele EP1, chain M Selector: selection "EP1" defined with 63 atoms. PyMOL>sele EP2, chain R Selector: selection "EP2" defined with 64 atoms. PyMOL>rms_cur EP1 and n. CA, EP2 and n. CA Executive: RMS = 7.457 (9 to 9 atoms) PyMOL: normal program termination. 

Мне нужно извлечь значение «7.457» из строки «Исполнительный: RMS = 7.457 (от 9 до 9 атомов)». Следует отметить, что значение «7.457», а также информация «от 9 до 9 атомов» будет варьироваться в разных раундах, поэтому я не могу использовать его в качестве шаблона. «Исполнительный: RMS» не является переменной, но повторяется несколько строк выше. По-видимому, у меня будет значение всегда во второй последней строке. Это можно использовать для извлечения значения, но я не знаю, как это сделать с помощью скрипта python или shell.

Кто-нибудь может мне помочь? Большое спасибо!

Кстати, это сценарий, над которым я работаю (это конкретная программа PyMol, извлекающая значения RMSD):

 ## RUNNING ## Importing PyMol files from pymol.cgo import * from pymol import cmd from pymol import stored # Loading MHC1 cmd.load ("MHC1.pdb") #Change chain C to chain M (MHC1 epitope) cmd.alter (('chain C'),'chain="M"') # Loading MHC2 cmd.load ("MHC2.pdb") #Change chain C to chain R (MHC2 epitope) cmd.alter (('chain C'),'chain="R"') ## Align MHC1 and MHC2 cmd.do ("align MHC1, MHC2") ## MHC1 epitope selection (EP1) cmd.do ("sele EP1, chain M") ## MHC2 epitope selection (EP2) cmd.do ("sele EP2, chain R") ## Remove chain names (this is required so 'rms_cur' will work properly) cmd.alter (("all"),'chain=""') ## Residues numbers aligned (this is required so 'rms_cur' will work properly) cmd.alter (("all"),'segi=""') ## RMSD Calculation between EP1 and EP2 cmd.do ("rms_cur EP1 and n. CA, EP2 and n. CA") 

2 Solutions collect form web for “Спасательная ценность второй строки”

Я не совсем понимаю, как вы получаете вывод, который вы показываете. Я предполагаю, что он создан по сценарию, который вы упомянули, и что вы можете просто передать его через что-то еще, чтобы разобрать его. Если это так, эти решения должны работать:

 your_script | tail -n 2 | awk '/RMS/{print $4}' 

tail -n 2 печатает последние две строки, а awk будет печатать четвертое поле любой строки, содержащей RMS , то есть значение, которое вы используете.

В качестве альтернативы:

 your_script | tail -n 2 | grep -oP '[.\d]+' | head -1 

Это будет grep для наборов чисел или . и использует head для печати первой.

Поскольку вы знаете, что хотите последнюю строку, содержащую RMS , вы также можете просто сделать:

 your_script | awk '/: RMS/{val=$4}END{print val}' 

Это будет проходить через каждую строку, и каждый раз, когда он найдет тот, который содержит : RMS , он сохранит 4-е поле как val . Блок END{} выполняется после того, как все строки были обработаны, поэтому в этой точке val будет последним найденным значением, которое вы хотите.

 script | sed -n '${x;p};h' 

Думаю, это должно сделать это. Он всегда будет печатать от второй до последней строки.

Если вы хотите только номер, который вы:

 script | sed -n '${x;s/.*= *//;s/ .*//p};h' 

Таким образом, большой H присоединяет к пространству удержания sed's содержимое текущего пространства шаблонов, в то время как мало h перезаписывает его. Поэтому, если вы переписываете пространство удержания для каждой строки, а на последней строке вы меняете пространство удержания с пространством шаблонов, то вы работаете со второй до последней строкой.

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

  • Скажите Python использовать альтернативную библиотеку
  • Транспонирование трехмерного тензора, воспроизводимого файлами
  • import: невозможно открыть X-сервер `@ ошибка / import.c / ImportImageCommand / 361
  • Задержка приложения при запуске с init.d?
  • Терминатор, установленный через Homebrew «Несовместимая версия библиотеки»,
  • Python не может импортировать OpenSSL
  • Как использовать GNOME Keyring с Python Keyring в виртуальной среде?
  • Python.h: Нет такого файла или каталога
  • Установка новейшей версии go в debian, не найденная другими программами
  • FreeBSD: Как запустить скрипт python в качестве демона?
  • Создание md5sum для понимания имен файлов с пробелами
  • Linux и Unix - лучшая ОС в мире.