从文本文件中提取部分匹配另一个文件中列出的关键字的所有行
Extract all lines from a text file that partial match keywords listed in another file
我用尽了在线搜索试图找出如何做到这一点。
我有制表符分隔的文件 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[[=12=]];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)
它在终端 window 中输出:
[
'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'
]
有没有办法
a) 修改此脚本以从 keywords.txt
之类的文件中读取并将行输出到另一个文件? (我的 python 技能达不到)
或
b) 使用 grep
、awk
、sed
... 来做到这一点
我认为问题在于我的关键字不是完整的独立词,必须部分匹配 searchfile.txt
中的内容。
感谢您的帮助!谢谢。
这在 python 中相当简单。假设您有 keywords.txt
和 input.txt
文件并希望输出到 output.txt
:
# 1
with open('keywords.txt', 'r') as k:
keywords = k.read().splitlines()
#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)。然后我们打开我们的输入和输出文本文件,循环遍历输入文件 line-by-line 并且如果我们在 (#2).
行中找到任何关键字则写入输出文件
我用尽了在线搜索试图找出如何做到这一点。
我有制表符分隔的文件 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[[=12=]];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)
它在终端 window 中输出:
[
'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'
]
有没有办法
a) 修改此脚本以从 keywords.txt
之类的文件中读取并将行输出到另一个文件? (我的 python 技能达不到)
或
b) 使用 grep
、awk
、sed
... 来做到这一点
我认为问题在于我的关键字不是完整的独立词,必须部分匹配 searchfile.txt
中的内容。
感谢您的帮助!谢谢。
这在 python 中相当简单。假设您有 keywords.txt
和 input.txt
文件并希望输出到 output.txt
:
# 1
with open('keywords.txt', 'r') as k:
keywords = k.read().splitlines()
#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)。然后我们打开我们的输入和输出文本文件,循环遍历输入文件 line-by-line 并且如果我们在 (#2).
行中找到任何关键字则写入输出文件