No se pueden separar los códigos en un archivo de muchos archivos en AWK / Python

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

  •  08-07-2019
  •  | 
  •  

Pregunta

Necesito poner diferentes códigos en un archivo para muchos archivos. El archivo es aparentemente compartido por los creadores de AWK en su página de inicio. El archivo también está aquí para facilitar su uso.

Mi intento de resolver el problema

Puedo obtener las líneas donde cada código se ubica

awk '{ print $1 }'

Sin embargo, no sé cómo

  1. para obtener los números de línea exactos para poder usarlos
  2. para recopilar códigos entre las líneas específicas para que se ignore la primera palabra de cada línea
  3. para poner estos códigos separados en archivos nuevos que se nombran con la primera palabra en la línea

Estoy seguro de que AWK y Python también pueden resolver el problema. Quizás, necesitamos usarlos juntos.

[editar] después de la primera respuesta

Recibo el siguiente error cuando intento ejecutarlo con awk

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

Solución

¿Intentaste:

  1. Cree un archivo unbundle.awk con el siguiente contenido:

$ 1! = prev {close (prev); prev = $ 1}            {print substr ($ 0, index ($ 0, " ") + 1) > $ 1}

  1. Elimine las siguientes líneas del archivo awkcode.txt:

    # unbundle: descomprime un paquete en archivos separados

$ 1! = prev {close (prev); prev = $ 1}            {print substr ($ 0, index ($ 0, " ") + 1) > $ 1}

  1. Ejecute el siguiente comando:

awk -f unbundle.awk awkcode.txt

Otros consejos

¿Estás tratando de descomprimir un archivo en ese formato? Es una especie de archivo shell. Para obtener más información, consulte http://en.wikipedia.org/wiki/Shar

Si ejecuta ese programa con awk, awk creará todos esos archivos. No necesitas escribir o reescribir mucho. Simplemente puede ejecutar ese programa awk, y aún debería funcionar.

Primero, vea el archivo en " plain " formato. http://dpaste.com/12282/plain/

Segundo, guarde la versión simple del archivo como 'awkcode.shar'

Tercero, creo que necesitas usar el siguiente comando.

awk -f awkcode.shar

Si desea reemplazarlo con un programa Python, sería algo como esto.

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()

El archivo Awk awkcode.txt no debe contener NINGUNA línea EN BLANCO. Si se encuentra alguna línea en blanco, el programa awk falla. No hay verificación de errores para filtrar la línea en blanco en el código. Esto lo pude descubrir después de varios días de lucha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top