从部分匹配其他文件中列出的关键字的文本文件中提取所有行
我已经耗尽在线搜索,试图找出如何执行此操作。从部分匹配其他文件中列出的关键字的文本文件中提取所有行
我有制表符分隔的文件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)使用grep
,awk
,sed
...要做到这一点
我认为问题是,我的关键字不是整个单独的单词并且必须部分匹配searchfile.txt
中的内容。
感谢您的帮助!谢谢。
这在Python中相当简单。假设你有keywords.txt
和input.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),则写入输出文件。
非常感谢@asongtoruin!当我将第8行中的'wb'更改为'w'时,这起作用 - 我收集它可能是python2 vs 3的东西...... – user2662391
@ user2662391认为它可能是操作系统问题,我的错误。现在编辑修复它,很高兴有帮助:) – asongtoruin
在'keywords.txt'你必须在头两行的末尾空白字符....这就是为什么'grep'没有作品 –
同意,在'grep的-F -f ...'shouild工作。使用'sed -i's/* $ //'file'从您的keywords.txt中删除空格。祝你好运。 – shellter
谢谢两个 - sed命令需要被_sed -i''s/* $ //'file_因为我不太明白的原因。但我检查过,以确保文件中没有任何空格(在textwrangler中搜索并替换空格)。但输出文件基本上仍然是整个输入文件!这很奇怪 - 但是python脚本现在可以解决问题了。 – user2662391