No se pueden separar los códigos en un archivo de muchos archivos en AWK / Python
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
- para obtener los números de línea exactos para poder usarlos
- para recopilar códigos entre las líneas específicas para que se ignore la primera palabra de cada línea
- 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
Solución
¿Intentaste:
- Cree un archivo unbundle.awk con el siguiente contenido:
$ 1! = prev {close (prev); prev = $ 1} {print substr ($ 0, index ($ 0, " ") + 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}
- 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.