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?

¿Fue útil?

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.

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