Solo tienes que insertar una línea más, justo antes del print(), para que 'parta' $campo4, igual que usas el split() un par de líneas más arriba, pero usando '\|' como separador.
Luego, tienes que hacer un bucle que recorra todos los valores extraídos. Algo así:
Using perl Syntax Highlighting
@valores = split /\|/, $campo4;
for $valor (@valores) {
print FO "$campo1,$campo2,$campo3,$valor,$campo5\n";
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
El caso es que es un problema muy sencillo. De hecho, ni siquiera te hace falta hacer ningún programa.
Ejecutando lo siguiente, en la misma línea de comandos, te servirá.
Using bash Syntax Highlighting
perl -nlaF, -E 'print "$F[1],$F2],$_,$F[4]" for split/\|/,$F[3]' original.txt > arreglado.txt
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Aquí, usamos
- -n para que abra el fichero de entrada y haga un bucle por todas las filas, pero sin imprimirlas (no nos interesan las líneas originales, solo las generadas por nosotros)
- -l para que quite los caracteres de fin de línea en la entrada, y los ponga en la salida (por si acaso)
- -a para que 'parta' cada línea
- -F, (atento a la coma) para que la partición sea por las comas. El resultado queda en @F
- -E ejecuta el mini-programa que sigue a continuación, que hace:
- split() del campo $F[3], usando '|' como separador, dando una lista de valores
- esa lista es recorrida por el bucle for(), que va poniendo cada valor en $_
- por cada valor, hacemos un print()
- lo que sacamos fuera es la unión de los campos, con comas junto con $_
Finalmente, usamos '>' del shell, para que redirija la salida del mini-programa Perl al fichero resultado.
Vamos, que estamos haciendo las mismas operaciones de antes, pero aprovechando las características de las opciones o
switch que se pueden poner a perl en la línea de comandos (más información en
perlrun).