文件 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 会给出与整行匹配的输出,但这里的情况并非如此。有什么想法吗?
in 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
这就是最终有效的方法。
awk 'NR==FNR{a[$1]=$2;next}$0 in a{print $0,a[$0]}' file2 file1
如果文件不大,只需执行
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'
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 中的下一行中断。