文件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中,我正在考虑使用grep但grep会给出与整行匹配的输出,但这不是这里的情况。有什么想法吗?
答案 0 :(得分:1)
在awk中
如果字符串匹配任何字段,则可以正常工作。
awk 'FNR==NR{a[$1]++;next}{for(i=1;i<=NF;i++)if(a[$i]){print;next}}' file{1,2}
a a1
b b1
用于编辑
awk 'FNR==NR{a[$1]++;next}{for(i=1;i<=NF;i++)if(a[$i]){for(j=1;j<=a[$i];j++)print;next}}' file{1,2}
a a1
a a1
b b1
答案 1 :(得分:1)
这是最终有效的。
awk 'NR==FNR{a[$1]=$2;next}$0 in a{print $0,a[$0]}' file2 file1
答案 2 :(得分:0)
如果文件不大,请执行
dpo1 = [i.strip() for i in dpo1]
lines = [i.strip() for i in dpo2 if(any([j for j in dpo1 if j in i]))]
>>>lines
['a a1', 'b b1']
>>>for i in lines:
... print i
'a a1'
'b b1'
答案 3 :(得分:0)
f1=open("file1")
f2=open("file2")
dpo1=f1.readlines()
dpo2=f2.readlines()
for x in dpo2:
for y in dpo1:
if y.strip() in x:
print x.strip()
break
对于dpo2中的每一行(源文件,生成输出),测试它是否包含dpo1中的一行(条件文件)。如果我们得到一个匹配,打印它并打破dpo2中的下一行。