Impossível separar códigos em um arquivo para muitos arquivos em AWK / Python

StackOverflow https://stackoverflow.com/questions/632958

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu preciso colocar códigos diferentes em um arquivo para muitos arquivos. O arquivo é aparentemente partilhada por criadores de AWK em sua homepage. O arquivo também é aqui para fácil utilização.

Minha tentativa para o problema

posso obter as linhas, onde cada código de localizar por

awk '{ print $1 }'

No entanto, eu não sei como

  1. para obter os números de linha exatos para que eu possa usá-los
  2. para códigos de recolher entre as linhas específicas de modo que a primeira palavra de cada linha é ignorado
  3. para colocar esses códigos separados em novos arquivos que são nomeados pela primeira palavra na linha

Estou certo de que o problema pode ser resolvido por AWK e com Python também. Talvez, precisamos usá-los juntos.

[editar] após a primeira resposta

Eu recebo o seguinte erro quando tento executá-lo com awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1
Foi útil?

Solução

Você tentou:

  1. Criar um unbundle.awk arquivo com o seguinte conteúdo:

$ 1 = prev {close (prev!); prev = $ 1} {Print substr (US $ 0, índice (US $ 0, " ") + 1)> $ 1}

  1. Remova as seguintes linhas formam a awkcode.txt arquivo:

    # Unbundle - um pacote descompactar em arquivos separados

$ 1 = prev {close (prev!); prev = $ 1} {Print substr (US $ 0, índice (US $ 0, " ") + 1)> $ 1}

  1. Execute o seguinte comando:

awk -f unbundle.awk awkcode.txt

Outras dicas

Você está tentando descompactar um arquivo nesse formato? É um tipo de arquivo de shell. Para mais informações, consulte http://en.wikipedia.org/wiki/Shar

Se você executar esse programa com awk, o awk irá criar todos os arquivos. Você não precisa escrever ou reescrever muito. Você pode simplesmente executar esse programa awk, e deve ainda trabalho.

Em primeiro lugar, consulte o arquivo no formato "simples". http://dpaste.com/12282/plain/

Em segundo lugar, salvar a versão simples do arquivo como 'awkcode.shar'

Em terceiro lugar, eu acho que você precisa usar o comando a seguir.

awk -f awkcode.shar

Se você quiser substituí-lo com um programa de Python, seria algo como isto.

import urllib2, sys

data= urllib2.urlopen( "http://dpaste.com/12282/plain/" )
currName, currFile = None, sys.stdout
for line in data:
    fileName, _, text= line.strip().partition(' ')
    if fileName == currName:
        currFile.write(line+"\n")
    else:
        if currFile is not None:
            currFile.close()
        currName= fileName
        currFile= open( currName, "w" )
if currFile is not None:
    currFile.close()

Awk arquivo awkcode.txt não deve conter qualquer linha em branco. Se qualquer linha em branco é encontrado, o programa awk falhar. Não há nenhuma verificação de erro para filtrar linha em branco no código. Isso eu poderia descobrir depois de vários dias de luta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top