2017-02-09 34 views
0

我已經耗盡在線搜索,試圖找出如何執行此操作。從部分匹配其他文件中列出的關鍵字的文本文件中提取所有行

我有製表符分隔的文件searchfile.txt有兩列和> 200行。樣品在這裏:

A(H1N1)/SWINE/COTES-DARMOR/388/2009 X? 4.28144245 
A(H1N2)/SWINE/SCOTLAND/410440/1994 X? 7.25878836 
A(H1)/SWINE/ENGLAND/117316/1986 X? 3.305392038 
A(H1)/SWINE/ENGLAND/438207/1994 X? 7.66078717 

我還有一個文件keywords.txt有一些關鍵字,在searchfile.txt部分匹配的ID:

ENGLAND/117316  
DARMOR/388 
438207 

我想提取searchfile.txt包含在keywords.txt

任何關鍵字的所有行

使用其他類似問題的解決方案我試過了:

grep -F -f keywords.txt searchfile.txt > selected.txt 

grep -f keywords.txt searchfile.txt 

awk 'FNR==NR {a[$0];next} ($NF in a)' keywords.txt searchfile.txt > result.txt 

我也得到了一部分的方式有這個python腳本:

infile = r"/path/to/searchfile.txt" 

results = [] 
to_keep = ["ENGLAND/117316", 
      "DARMOR/388", 
      "438207"] 

with open(infile) as f: 
    f = f.readlines() 

for line in f: 
    for phrase in to_keep: 
     if phrase in line: 
      results.append(line) 
      break 

print(results) 

,並將其輸出這個終端窗口:

[ 
    'A(H1N1)/SWINE/COTES-DARMOR/388/2009 X?\t4.28144245\n', 
    'A(H1)/SWINE/ENGLAND/117316/1986 X?\t3.305392038\n', 
    'A(H1)/SWINE/ENGLAND/438207/1994 X?\t7.66078717\n' 
] 

有沒有辦法來

一)修改這個腳本從keywords.txt這樣的文件中讀取並輸出行到另一個文件? (我的Python的技能都達不到那個)

OR

B)使用grepawksed ...要做到這一點

我認爲問題是,我的關鍵字不是整個單獨的單詞並且必須部分匹配searchfile.txt中的內容。

感謝您的幫助!謝謝。

+1

在'keywords.txt'你必須在頭兩行的末尾空白字符....這就是爲什麼'grep'沒有作品 –

+0

同意,在'grep的-F -f ...'shouild工作。使用'sed -i's/* $ //'file'從您的keywords.txt中刪除空格。祝你好運。 – shellter

+0

謝謝兩個 - sed命令需要被_sed -i''s/* $ //'file_因爲我不太明白的原因。但我檢查過,以確保文件中沒有任何空格(在textwrangler中搜索並替換空格)。但輸出文件基本上仍然是整個輸入文件!這很奇怪 - 但是python腳本現在可以解決問題了。 – user2662391

回答

0

這在Python中相當簡單。假設你有keywords.txtinput.txt文件,並要輸出到output.txt

# 1 
with open('keywords.txt', 'r') as k: 
    keywords = k.read().splitlines() 

results = [] 

#2 
with open('input.txt') as f, open('output.txt', 'w') as o: 
    for line in f: 
     if any(key in line for key in keywords): 
      o.writelines(line) 

此讀取關鍵字文件,並將它從每行的列表(#1)。然後,我們打開我們的輸入和輸出文本文件,逐行循環輸入文件,如果在行中找到任何關鍵字(#2),則寫入輸出文件。

+0

非常感謝@ason​​gtoruin!當我將第8行中的'wb'更改爲'w'時,這起作用 - 我收集它可能是python2 vs 3的東西...... – user2662391

+0

@ user2662391認爲它可能是操作系統問題,我的錯誤。現在編輯修復它,很高興有幫助:) – asongtoruin

相關問題