Isso parece mais um trabalho python para mim. Uma regra geral é: se sua tarefa requer apenas um processamento "plano" e cego para o conteúdo, os utilitários principais (preferencialmente o gnu) são o caminho a percorrer. Isso vale para a substituição de strings, deleção, processamento baseado em linha, classificação simples, contagem, filtragem e assim por diante ... essas ferramentas permitem que você escreva rapidamente um one-liner para fazer o que quiser, com a prática nem requer muito pensamento.
Por outro lado, se você precisa de um trabalho complexo que precisa examinar o arquivo, implica em uma estrutura hierárquica (tipo árvore), delimitadores personalizados e sequências com reconhecimento de contexto, é muito mais fácil ter a mesma estrutura disponível na sua linguagem de programação. Um exemplo extremo são os arquivos html / xml / json, quaisquer arquivos com chaves aninhadas e assim por diante ... se você tem estruturas de dados muito poderosas disponíveis (o python faz), simplesmente grave-as, processe-as de maneira semelhante a objetos e leia-as voltar. Você ainda pode fazê-lo no awk (ou com um pouco mais de esforço no sed), mas não vale a pena.
No seu caso, você precisará memorizar a posição do marcador anterior (ou manter um buffer longo), que fica um pouco desajeitado com o software de processamento de linha. Em python, no entanto, é fácil.
Exemplo de código:
#!/usr/bin/python
import sys
with open(sys.argv[1],'r') as file, open(sys.argv[2],'w') as file1, open(sys.argv[3],'w') as file2, open(sys.argv[4],'w') as file3:
counter = 1
current_buffer = []
for line in file:
if line.startswith('//'):
#we found a delimiter, flush the buffer
#could use regular expressions, but for the sake of this example
#this is enough
prefix = '//Name {}'.format(counter)
new_header = prefix+line[len(prefix):]
file1.write(new_header)
file2.write(new_header)
for oldline in current_buffer:
file1.write(oldline)
if current_buffer: #only first line to file 2
first_line = current_buffer[0]
file2.write(first_line)
#same here, could use regular expressions from "import re" but we don't have to
rest_of_line = first_line.split(' ',1)[1]
file3.write('//Name {} {}\n'.format(counter,rest_of_line.strip()))
current_buffer=[]
counter+=1
else:
current_buffer.append(line)
#if the file is well-formatted, current_buffer should be empty now - otherwise, do special handling
Chame como ./test.py inputfile file1 file2 file3
e veja se é o que você queria.