Unix - Split Text File

 
Vista:
sin imagen de perfil

Split Text File

Publicado por Jorge (1 intervención) el 23/08/2017 22:38:59
Buenas muchachos, soy nuevo en el foro.

Estoy aprendiendo sobre unix y quiero ver si me pueden dar una mano con lo siguiente.
Tengo el siguiente archivo Nombres.txt de ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* Campo 1 */
Alberto
Susana Romina
Edmundo
 
/* Campo 2 */
Jorge Ramiro
Pedro
Alfonso
Ulises
 
/* Campo 3 */
Domingo
Lautaro
Pedro Jimena Fernando
 
/* Campo 2 */
Veronica Juan
Pedro

Lo que necesito es realizar un split del mismo y que genere multiples archivos con el nombre que se encuentra entre lo comentado.

Debería quedar de la siguiente manera:

Campo1.txt
1
2
3
Alberto
Susana Romina
Edmundo

Campo 2.txt
1
2
3
4
5
6
Jorge Ramiro
Pedro
Alfonso
Ulises
Veronica Juan
Pedro

Campo 3.txt
1
2
3
Domingo
Lautaro
Pedro Jimena Fernando


Aclaro que dentro del archivo Nombres.txt puedo tener campos repetidos como es el caso de /* Campo 2 */ que se encuentra dos veces.

Espero me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 39
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Split Text File

Publicado por Antoni Masana (19 intervenciones) el 29/08/2017 06:18:09
No entiendo que significado tiene esto ni para que sirve, simplemente me resulta extraño.

Yo lo haría con un awk, que es la forma más simple, simplemente porque me gusta este comando. El proceso es simple:

- busca los registros que empiezan por /* y tomas el 2º y 3º campo para formar el nombre de fichero de salida y salta al siguiente registro
- Si la línea tiene datos los graba en el archivo.

1
2
3
4
5
6
7
8
9
10
awk '  BEGIN { file="/dev/null" }

     { if(substr($0,1,2) == "/*") {
         split($0,r," "); file=sprintf("%s%s.txt", r[2], r[3]) ; next
       }
       if(length($0) > 0) {
         printf("%s\n", $0) >>file ; close(file) }
       }
     }
 ' nombres.txt

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar