Assumindo '====' sob as palavras-chave da seção, o seguinte Python resolveria o problema sem precisar ser explícito nos nomes das seções:
import sys
from collections import OrderedDict
combined = OrderedDict()
seperator = '===='
for file_name in 'f1.txt f2.txt'.split(): #sys.argv[1:]:
with open(file_name) as fp:
lines = fp.readlines()
data = []
while len(lines):
# reverse over the lines
line = lines.pop(-1)
if not line.strip(): continue # skip empty
if line.startswith(seperator):
name = lines.pop(-1)
section = combined.setdefault(name, [])
section.extend(reversed(data))
data = []
else:
data.append(line)
for idx, k in enumerate(reversed(combined)):
if idx != 0:
print # insert empty line before all but first
sys.stdout.write(k)
print('=' * len(k))
for line in combined[k]:
sys.stdout.write(line)
Você precisa fornecer os nomes dos arquivos na invocação da linha de comando.
Isso gera a saída:
Numbers
========
1
2
3
4
5
6
Letters
========
A
B
C
D
E
F