Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Unir dos archivos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Dom Jun 01, 2008 12:44 am
amalia
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Jun 2008
Mensajes: 5
Unir dos archivos Responder citando

Hola a todos. Mi problema es el siguiente Rolling Eyes, ojalá me puedan ayudar:
Tengo dos archivos .dat que cada uno contienen una fila de datos y quisiera unir esas dos filas de datos en un solo archivo .dat por ejemplo:

Código:
---archivo1.dat------ archivo2.dat------------------- archivo3.dat
-------23 ---------------- 13------------------------- 23----13     
-------36 ---------------- 16------------------------- 36----16
-------13 ---------------- 44------------------------- 13----44
-------16 ---------------- 23--------------------------16--- 23
-------26 ---------------- 19--------------------------26----19
-------43 ---------------- 26------------------------- 43----26
-------32 -----------------32------------------------- 32--- 32
-------14 -----------------17------------------------- 14----17
-------22 ---------------- 25------------------------- 22----25


Si alguien me puede ayudar con este script en Perl se los agradecería mucho.
Gracias Very Happy
Mensaje Dom Jun 01, 2008 5:48 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Bienvenida a los foros de Perl en Español, amalia.

No necesitas Perl para eso. Te vale con usar el comando paste, que forma parte de las coreutils de GNU.

bash:
paste archivo1.dat archivo2.dat > archivo3.dat


P.D. Esta es una respuesta del foro Experto.
Mensaje Dom Jun 01, 2008 12:24 pm
amalia
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Jun 2008
Mensajes: 5
Responder citando

Hola explorer, gracias por la bienvenida y muchas gracias por responderme tan prontamente, tu respuesta me ayudó bastante.

Very Happy
Mensaje Dom Jun 01, 2008 4:22 pm
amalia
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Jun 2008
Mensajes: 5
Operaciones con datos Responder citando

Hola, me surgió un nuevo problema al hacer operatorias con los datos que se juntaron a partir de dos archivos .dat.
Mi problema es el siguiente:
Como dije anteriormente yo tengo dos archivos .dat que fueron unidos en un solo archivo .dat con el siguiente comando:

Código:
paste archivo1.dat archivo2.dat > archivo3.dat

---archivo1.dat------ archivo2.dat------------------- archivo3.dat
-------23 ---------------- 13------------------------- 23----13     
-------36 ---------------- 16------------------------- 36----16
-------13 ---------------- 44------------------------- 13----44
-------16 ---------------- 23--------------------------16--- 23
-------26 ---------------- 19--------------------------26----19
-------43 ---------------- 26------------------------- 43----26
-------32 -----------------32------------------------- 32--- 32
-------14 -----------------17------------------------- 14----17
-------22 ---------------- 25------------------------- 22----25


Mi problema surgió cuando quise sumar la columna[0] con la columna[1], por ejemplo

Código:
--columna[0]---columna[1]--- columna[2]
------23------+---- 13-------------36
----- 36------+-----16-------------52
------13------+---- 44------------ 57


pero solo reconoce la columna [0]; si alguien me puede ayudar en este problema, se lo agradecería mucho.
Mensaje Dom Jun 01, 2008 4:36 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Estaría bien ver el código que estás usando...

En cuanto a tu problema, tienes que leer cada línea del fichero, separar las columnas, hacer la suma y escribir la nueva línea.
Mensaje Dom Jun 01, 2008 6:09 pm
amalia
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Jun 2008
Mensajes: 5
Responder citando

Hola el programa que estoy usando es:

Perl:
#!/usr/bin/perl

open (UNO, "<archivo1.dat");
open (DOS, "<archivo2.dat");

system"(paste archivo1.dat archivo2.dat > archivo3.dat)";

close(UNO);
close(DOS);

open(TRES, "<archivo3.dat");
open (OUT, ">archivo4.dat");

while($lineas=<TRES>)
{
chop($lineas);
@datos=$lineas;
$suma=$datos[0]+$datos[1];

print OUT " $datos[0] $datos[1] $suma\n";
print "$suma\n";
}


los valores dentro del archivo3.dat se ven así:

Código:
49 50   49 50
-4.1   -8.7
-4.2   -9.3
-4.4   -9.8
-4.5   -10.3
-4.7   -10
-4.9   -9.7
-5.1   -9.3
-5.1   -8.2
-5   -7.2
-4.8   -6.1
-4.4   -4.9
-4   -3.8
-3.1   -2.5
-1.7   -1
-0.3   0.5
0.1   1.4
-0.4   1.8
-0.8   2.3
-0.9   2.9
-1   3.5
-1   4.1


Si me pudieran ayudar, se los agradecería.
Mensaje Lun Jun 02, 2008 12:22 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

El error está en la línea
Perl:
@datos=$lineas;

No haces la división entre columnas. Debes usar split():
Perl:
@datos = split(" ", $lineas);
Mensaje Lun Jun 02, 2008 10:56 am
amalia
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Jun 2008
Mensajes: 5
Responder citando

Hola explorer, muchas gracias por la ayuda, estoy muy agradecida.
Mensaje Lun Jun 02, 2008 12:00 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

De hecho, se puede reducir algo:

Perl:
#!/usr/bin/perl

open(UNO, "<archivo1.dat"); # Abrir...
open(DOS, "<archivo2.dat");
open(OUT, ">archivo4.dat");

while( $uno = <UNO> ) {   # Leemos del primer fichero
    $dos = <DOS>;         # Leemos del segundo
    chomp($uno, $dos);    # ¡Chopped!
                          # Salida
    print OUT "$uno $dos ", $uno + $dos, "\n";
}

close(UNO);                  # Cerrar...
close(DOS);
close(OUT);
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group