Python 如何从一个文件中获取包含另一个文件中字符串的所有行?

Python 如何从一个文件中获取包含另一个文件中字符串的所有行?,python,linux,bash,file,Python,Linux,Bash,File,文件1: 文件2: a a b c d 我的期望输出: a a1 b b1 e e1 f f1 我正在尝试使用bash或Python实现这一点 在python中,我尝试了: a a1 a a1 b b1 在bash中,我曾考虑使用grep,但grep将提供与整行匹配的输出,但这里的情况并非如此。有什么想法吗?如果文件不大,就这么做 f1=open("file1") f2=open("file2") dpo1=f1.readlines() dpo2=f2.readlines() for i

文件1:

文件2:

a
a
b
c
d
我的期望输出:

a a1
b b1
e e1
f f1
我正在尝试使用bash或Python实现这一点

在python中,我尝试了:

a a1
a a1
b b1

在bash中,我曾考虑使用grep,但grep将提供与整行匹配的输出,但这里的情况并非如此。有什么想法吗?

如果文件不大,就这么做

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
在awk中

如果字符串与任何字段匹配,则将起作用

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'
awk'FNR==NR{a[$1]+;next}{for(i=1;i

对于dpo2(生成输出的源文件)中的每一行,测试它是否包含dpo1(条件文件)中的一行。如果我们得到一个匹配项,则打印它并中断dpo2中的下一行。

这是最终有效的方法

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

您尝试过搜索功能吗?您尝试过egrep吗?您可以执行类似于
egrep'^a'
的操作来匹配以字母
a
开头的所有行。仅使用代码的答案不是一个好答案。请解释您在做什么。OK。对于dpo2(生成输出的源文件)中的每一行,测试它是否包含dpo1中的一行(条件文件)。如果我们得到一个匹配项,打印它并在dpo2中的下一行中断。这是O(M*N)。糟糕的解决方案。可以在O(M+N)中完成,空格为O(M)或O(N)哪一个是最小的。它不提供任何输出。出于某种原因,它不提供任何输出。对于重复,我应该做什么更改?检查我最近的编辑。这很好,但这是按升序排序输出。我想保持文件1中的顺序。我应该做什么更改?@kaushaya,你是什么意思,它通过l工作在第二个文件中,没有办法使其无序。是的,第二个文件按升序排序,但第一个文件不是。有没有办法按第一个文件的顺序获得输出?与上面给出的示例相反,第一个文件是第二个文件的子集。这意味着,所有字符串都肯定包含在第二个文件。发布你的真实数据,因为我不知道你在说什么。
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
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
awk 'NR==FNR{a[$1]=$2;next}$0 in a{print $0,a[$0]}' file2 file1