• Publicidad

Unir dos archivos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Unir dos archivos

Notapor amalia » 2008-06-01 01:44 @114

Hola a todos. Mi problema es el siguiente :roll:, 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: Seleccionar todo
---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 :D
amalia
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-06-01 01:16 @094

Publicidad

Notapor explorer » 2008-06-01 06:48 @325

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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
paste archivo1.dat archivo2.dat > archivo3.dat
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


P.D. Esta es una respuesta del foro Experto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor amalia » 2008-06-01 13:24 @600

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

:D
amalia
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-06-01 01:16 @094

Operaciones con datos

Notapor amalia » 2008-06-01 17:22 @765

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: Seleccionar todo
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: Seleccionar todo
--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.
amalia
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-06-01 01:16 @094

Notapor explorer » 2008-06-01 17:36 @775

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor amalia » 2008-06-01 19:09 @839

Hola el programa que estoy usando es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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

Código: Seleccionar todo
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.
amalia
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-06-01 01:16 @094

Notapor explorer » 2008-06-02 01:22 @098

El error está en la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@datos=$lineas;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

No haces la división entre columnas. Debes usar split():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@datos = split(" ", $lineas);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor amalia » 2008-06-02 11:56 @539

Hola explorer, muchas gracias por la ayuda, estoy muy agradecida.
amalia
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-06-01 01:16 @094

Notapor explorer » 2008-06-02 13:00 @583

De hecho, se puede reducir algo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado