Prueba con esto:
Using perl Syntax Highlighting
#!/usr/bin/perl
# Es la ruta donde están todos los archivos .dat
my @ficheros = </home
/lis
/Desktop
/DATOS
/datos_met_paranal
.dat
/200
*>;
open (TODOSLOSFICHEROS
,">todos.dat") or die "$!\n";
foreach $fichero ( @ficheros ) {
open (FICHERO
, "<$fichero") or die "$!\n";
print TODOSLOSFICHEROS
<FICHERO>;
close(FICHERO
);
}
close TODOSLOSFICHEROS
;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Los cambios son:
- El operador diamante (<>) cuando contiene una ruta con un comodín, se usa para obtener una lista de ficheros. Como es una lista, necesitamos guardarlos en un array. Ahí tenías el error: al guardarlo en un escalar solo almacenabas uno de esos valores
- Luego hay que abrir el fichero donde van a quedar reunidos
- Después un bucle que los recorra, uno a uno
- Para cada fichero, lo abrimos,
- Y todo su contenido es transferido al nuevo fichero. En este caso, al usar el operador diamante en un contexto de lista, nos devuelve todas las líneas del fichero, que son mandadas por print al nuevo fichero
- Cerramos el fichero y a por otro
- Al final, cerramos el nuevo fichero
Este, además, es un bonito ejemplo del doble papel que hace el operador diamante: por un lado nos sirve para obtener un listado de ficheros y por otra parte nos sirve para leer de un fichero.
Y también es un ejemplo de lo lioso de Perl: tenemos un operador que hace dos cosas completamente distintas.
Las normas de estilo más modernas, aconsejan simplificar este doble uso. Lo recomendable es dejar el operador diamante solo para leer de ficheros. Para la operación de obtener listados de ficheros es mejor usar la función glob():
Using perl Syntax Highlighting
my @ficheros = glob('/home/lis/Desktop/DATOS/datos_met_paranal.dat/200*');Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Otro detalle: el ejemplo que te he puesto es para unir ficheros línea a línea, pero en tu caso, estás eliminando los finales de línea y sustituyéndolos por espacios en blanco. Si eso es lo que quieres hacer, puedes probar la siguiente variación:
Using perl Syntax Highlighting
#!/usr/bin/perl
# Es la ruta donde están todos los archivos .dat
my @ficheros = glob('/home/lis/Desktop/DATOS/datos_met_paranal.dat/200*');
open (TODOSLOSFICHEROS
,">todos.dat") or die "$!\n";
foreach $fichero ( @ficheros ) {
open (FICHERO
, "<$fichero") or die "$!\n";
chomp(@lineas = <FICHERO>);
close(FICHERO
);
print TODOSLOSFICHEROS
join(' ', @lineas);
}
close TODOSLOSFICHEROS
;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
O esta otra:
Using perl Syntax Highlighting
#!/usr/bin/perl
# Es la ruta donde están todos los archivos .dat
my @ficheros = glob('/home/lis/Desktop/DATOS/datos_met_paranal.dat/200*');
foreach $fichero ( @ficheros ) {
open (FICHERO
, "<$fichero") or die "$!\n";
chomp(@lineas = <FICHERO>);
close(FICHERO
);
push (@todas_las_lineas, join(' ', @lineas) );
}
open (TODOSLOSFICHEROS
,">todos.dat") or die "$!\n";
print TODOSLOSFICHEROS
@todas_las_lineas;
close TODOSLOSFICHEROS
;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4