我有两个文本文件,格式。
File 1
Column A Column B
File 2
Column B Column C
在文件2中,B列只是文件1中数据的一个子集。
我希望搜索文件1,如果找到文件2中的B列数据点匹配,则打印A列值。
任何人都可以轻松地建议如何做到这一点吗?最好是Python或Bash。
非常感谢。
一个例子
File 1
Bruce Dog
Frank Cat
Adam Fish
Alex Horse
File 2
Dog Blue
Fish Green
会打印:
Bruce
Adam
答案 0 :(得分:4)
这可以通过使用字典
轻松实现示例实施
from itertools import imap
file2 = dict(imap(str.split, open("file2")))
with open("file1") as fin:
for key, value in imap(str.split, fin):
if value in file2:
print key
OP注意
如果由于未明确关闭文件句柄而导致资源泄漏,请将第一个语句括在with子句中
with open("file2") as fin:
file2 = dict(imap(str.split, fin))
答案 1 :(得分:0)
你有什么尝试?
以下是算法的一个想法:
foo
bar
foo
拆分为foosplited
bar
拆分为barsplited
i
中奇数foosplited
索引的每个元素,如果它们相同,则查看barsplited
中偶数的索引元素。如果相同,转到6;不,转到7 foosplited[i-1]
答案 2 :(得分:0)
dict1 = {}
for line in file1:
# The 2nd word will be the key, the 1st will be the value
words = line.split()
dict1(words[1]) = words[0]
for line in file2:
words = line.split()
if dict1.has_key(words[0]):
print words[1]
答案 3 :(得分:0)
$ join -12 -21 -o 1.1 <(sort -k2,2 file1) <(sort file2)
Bruce
Adam
由于join
要求在连接字段上对文件进行排序,因此无法保证输出的顺序。如果您希望输出的顺序与输入文件的顺序相同,请使用awk
- 如果您搜索,请在此处提供大量示例。
答案 4 :(得分:0)
with open('file1.txt') as f1:
d = {v:k for (k,v) in [line.split() for line in f1]}
with open('file2.txt') as f2:
print [d[k] for (k,v) in [line.split() for line in f2]]
>>> ['Bruce', 'Adam']
答案 5 :(得分:0)
with open("file1","rt") as f1, open("file2","rt") as f2:
data = {}
for line in f1:
line = line.replace("\n","")
colA,colB = line.split(" ")[:2]
data[colB] = colA
for line in f2:
colB = line.replace("\n","").split(" ")[0]
out = data.get(colB)
if out:
print out
答案 6 :(得分:0)
您可以从第一个文件创建字典,如:
dict1 = {
"Dog": "Bruce Dog",
"Cat": "Frank Cat"
}
因此第二列将是键,值将包含两者。然后从第二个文件的第一列创建e set
。
set1 = set([“Fish”,“Dog”])
然后从dict1
键创建另一个集合并执行intersection
intersect = set(dict1.keys().intersection())
print intersect
>> set(["Dog"])
for i in intersect:
print dict1[i]