Python 比较并提取行,然后发送到新文件

Python 比较并提取行,然后发送到新文件,python,bash,shell,functional-programming,Python,Bash,Shell,Functional Programming,假设有一个文件包含以下内容: Hello ========= last: paul last: susy last: king last: jorge last: henry last: ida Goodbye ========= first: paul first: susy first: charles first: lincoln first: ida Example output last: paul first: paul last: susy first: sus

假设有一个文件包含以下内容:

Hello
=========
last: paul 
last: susy 
last: king  
last: jorge 
last: henry 
last: ida 

Goodbye
=========
first: paul
first: susy
first: charles
first: lincoln
first: ida

Example output

last: paul
first: paul
last: susy
first: susy
last: ida
first: ida

如何用bash或python编写一个脚本来提取所有匹配的名称并推送到一个新文件,而不考虑开头的最后一个和第一个关键字?

假设您的文件名为test.txt

为了稍作解释,第一部分为first_name和last_name创建了两个空集。您可以使用这些列表,但检查成员身份,这是稍后使用姓氏中的if name可以更快地检查集合的成员身份。它的O1表示集合,On表示列表,其中n是列表的大小

Python的一个很好的特性是,您可以自然地迭代文件对象的行。line.split[1]部分使用空格分隔行,并从0中获取第二个元素Python索引

虽然集合的成员身份检查速度更快,但它们是无序的,因此不会保留文件中名称的顺序。为了构造输出_名称,我使用了所谓的。最后一部分将结果写入文件

说文件是names.txt

在Python中:

import re
import os

f = open('names.txt')
lines = f.readlines()
last_names = first_names = result = []
for line in lines:
    if line.startswith('last:'):
       last_names.append(line[6:])
    elif line.startswith('first:'):
        first_names.append(line[7:])
result = [name for name in last_names if name in first_names]
#do whatever you want to with result

import re
import os

f = open('names.txt')
lines = f.readlines()
last_names = first_names = result = []
for line in lines:
    if line.startswith('last:'):
       last_names.append(line[6:])
    elif line.startswith('first:'):
        first_names.append(line[7:])
result = [name for name in last_names if name in first_names]
#do whatever you want to with result
awk 'FNR==NR {a[FNR""]=$0; next}{print a[FNR""]"\n"$0}' file1 file2