これを行う方法を調べるためにオンライン検索を使い果たしました。テキストファイルからすべての行を抽出し、別のファイルにリストされた部分一致キーワードを抽出します。
私はタブ区切りファイルsearchfile.txt
に2列と> 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
私は部分的にsearchfile.txt
でIDと一致いくつかのキーワードを持つ別のファイルkeywords.txt
持っている:私はkeywords.txt
searchfile.txt
からすべての行を抽出したい
ENGLAND/117316
DARMOR/388
438207
を
他の同様の質問からの解決策を使用しました:
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)はこれを行うには
... grep
、awk
、sed
を使用し、私は問題が私のキーワードが全体の別々の言葉ではないということだと思いますsearchfile.txt
にあるものと部分一致する必要があります。
助けてくれてありがとうございます!ありがとう。
'keywords.txt'最初の2行の末尾に空白文字があります。そのため、' grep'は動作しません。 –
'grep -F -f ...' shouild work 。 'sed -i 's/* $ //' file'を使って、keywords.txtからスペースを削除してください。がんばろう。 – shellter
ありがとうございます - sedコマンドは_sed -i '' 's/* $ //' file_する必要がありました。しかし、私は自分のファイルに空白がないことを確認しました(テキストラングラーではスペースを検索して置き換えません)。しかし、出力ファイルは基本的には入力ファイル全体です!これは不思議ですが、Pythonスクリプトがうまくいきましたので、今問題を解決しました。 – user2662391