想象一下,我們有這些資料:
##sequence-region P51451 1 505
##sequence-region P22223 1 829
P22223 UniProtKB Transmembrane 655 677 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region Q01518 1 475
##sequence-region Q96MP8 1 289
##sequence-region Q9HCJ2 1 640
Q9HCJ2 UniProtKB Transmembrane 528 548 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region P48059 1 325
##sequence-region Q9UHB6 1 759
##sequence-region P16581 1 610
P16581 UniProtKB Transmembrane 557 578 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
最終輸出將是獲取包含單詞“跨膜”的行及其對應的頂行:
##sequence-region P22223 1 829
P22223 UniProtKB Transmembrane 655 677 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region Q9HCJ2 1 640
Q9HCJ2 UniProtKB Transmembrane 528 548 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region P16581 1 610
P16581 UniProtKB Transmembrane 557 578 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
我正在嘗試使用 grep,但我有點卡住了
謝謝!
uj5u.com熱心網友回復:
如果你有GNU grep(grepLinux 上的標準)并且你的資料在data.txt你可以使用的檔案中:
grep -w Transmembrane --before-context=1 --no-group-separator data.txt
- 該
-w選項將導致匹配僅應用于輸入中的整個單詞。因此,例如,Transmembrane123將不匹配。那可能不是你想要的。 --before-context=1導致grep在每個匹配行之前在輸入中列印一行。--no-group-separator導致grep在匹配行組和前一行之間不列印分隔符。通常它會列印一個包含--.
uj5u.com熱心網友回復:
您可以python按照以下方式用于此任務,讓file.txt內容為
##sequence-region P51451 1 505
##sequence-region P22223 1 829
P22223 UniProtKB Transmembrane 655 677 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region Q01518 1 475
##sequence-region Q96MP8 1 289
##sequence-region Q9HCJ2 1 640
Q9HCJ2 UniProtKB Transmembrane 528 548 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region P48059 1 325
##sequence-region Q9UHB6 1 759
##sequence-region P16581 1 610
P16581 UniProtKB Transmembrane 557 578 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
然后創建檔案gettransmembrane.py保存
import fileinput
for line in fileinput.input():
if "Transmembrane" in line:
print(prevline,end="")
print(line,end="")
prevline = line
然后
python gettransmembrane.py file.txt
輸出
##sequence-region P22223 1 829
P22223 UniProtKB Transmembrane 655 677 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region Q9HCJ2 1 640
Q9HCJ2 UniProtKB Transmembrane 528 548 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
##sequence-region P16581 1 610
P16581 UniProtKB Transmembrane 557 578 . . . Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255
說明:fileinput是python標準庫(1)中的模塊,對于我列印的每一行,如果它確實有Transmembrane子字串,則前一行,請注意在列印后prevline = line完成。我確實將空s 指定為s,因為行的末尾已經有換行符。strend
(1)如果您僅限于處理一個您事先知道名稱的檔案,您可以選擇使用簡單檔案讀取 using open, usingfileinput允許您使用多個檔案(類似于cat命令)或 using stdin,所以如果您有以上作為另一個命令的輸出你不必制作臨時檔案,但可以將所述命令的管道輸出到python gettransmembrane.py
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439443.html
