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

时间:2015-04-23 07:59:54

标签: python linux bash file

文件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会给出与整行匹配的输出,但这不是这里的情况。有什么想法吗?

4 个答案:

答案 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中的下一行。