文件1:
a
a
b
c
d
文件2:
a a1
b b1
e e1
f f1
我想要的输出:
a a1
a a1
b b1
我正在尝试使用bash或Python实现它。
在python中我尝试过:
f1=open("file1")
f2=open("file2")
dpo1=f1.readlines()
dpo2=f2.readlines()
for i in dpo2:
for j in dpo1:
if j in i:
print i
在bash中我尝试过:
awk 'NR == FNR { ++h[tolower($1)]; next; } h[tolower($1)]' file1 file2
但这不考虑重复。它会给出输出
a a1
b b1
有什么想法吗?
答案 0 :(得分:3)
加入正是您所需要的:
$ join f1 f2
a a1
a a1
b b1
有关详细信息,请参阅man join
答案 1 :(得分:1)
这是使用awk的一种方法:
$ awk 'NR==FNR{a[$1]=$2;next}$0 in a{print $0,a[$0]}' file2 file1
a a1
a a1
b b1
将第二个文件中的键值对读入数组a
,然后打印匹配的键值。
答案 2 :(得分:1)
您可以从第二个文件创建字典,并将第一个文件中的每个键映射到相应的值:
text = open("file2.txt").read().splitlines()
keys = [i.split()[0] for i in text]
values = [i.split()[1] for i in text]
dic = dict(zip(keys, values))
# Now you have:
#dic = {'b': 'b1', 'e': 'e1', 'f': 'f1', 'a': 'a1'}
text = open("file1.txt").read().splitlines()
try:
for word in text:
print(word, dic[word])
except KeyError:
pass
输出结果为:
a a1
a a1
b b1
>>>
答案 3 :(得分:0)
首先阅读file2
,然后阅读file1
awk '{if(FNR==NR) {# first file
data[$1]=$2}
else { # second file
if($1 in data) print $1, data[$1]}' file2 file1
内部变量NR
和FNR
分别是输入流中当前记录的编号和当前文件中记录的编号,因此它们仅在{时{ {1}}正在读取第一个文件。
如果我们正在阅读第一个文件,我们会构建一个关联数组,其中包含第二个字段,由第一个字段索引。
如果我们正在读取第一个文件,我们检查其中的单个字段是否包含在关联数组中(检查是在关联数组的 indices 上),如果我们找到匹配我们输出当前键和相应的值。