¿Cómo se divide una base de archivos en un token?
-
08-07-2019 - |
Pregunta
Digamos que tiene un archivo que contiene textos (de 1 a N) separados por un $ ¿Cómo se puede cortar el archivo para que el resultado final sea N archivos?
texto1 con líneas nuevas $
text2 $ etc ... $
textN
Estoy pensando en algo con awk o sed, pero ¿hay alguna aplicación de Unix disponible que ya realice ese tipo de tarea?
Solución
¿Quizás split -p
patrón ?
Hmm. Eso puede no ser exactamente lo que quieres. No divide una línea, solo inicia un nuevo archivo cuando ve el patrón. Y parece ser compatible solo con sistemas relacionados con BSD.
Podría usar algo como:
awk 'BEGIN {RS = "<*>quot;} { ... }'
editar: Puede encontrar algo de inspiración para la parte {...}
aquí:
http://www.gnu.org/manual/gawk /html_node/Split-Program.html
editar: Gracias a los comentarios de dmckee, pero csplit
también parece copiar toda la línea en la que se produce el patrón.
Otros consejos
awk 'BEGIN {RS = " $ " ;; ORS = " "} {textNumber ++; imprimir $ 0 > " text " textNumber " .out " } 'fileName
Gracias a Bill Karwin por la idea.
Editar: Agregue el ORS = " " para evitar imprimir una nueva línea al final de cada archivo.
Si estoy leyendo esto correctamente, el comando UNIX cut puede ser utilizado para esto.
cut -d $ -f 1- filename
Es posible que tenga la sintaxis ligeramente desactivada, pero eso debería indicar a cut que está utilizando $ campos separados y devolver los campos 1 hasta el final.
Es posible que deba escapar de $.
awk -vRS="<*>quot; '{ print <*> > "text"t++".out" }' ORS="" file
usando el comando dividir podemos dividir usando cadenas.
pero el comando csplit también le permitirá cortar archivos basándose en expresiones regulares.