Renombrar campos de tabla a partir de una Base de Datos txt
Publicado: 2016-03-14 06:56 @330
Hola a todos.
Tengo un problemilla que no sé muy bien cómo enfocar en el título de este mensaje.
La historia es que tengo una tabla cuyos campos tienen un identificador que modifiqué en su día, y cuyo nombre original guardé en un txt junto a su nuevo nombre en formato:
Y así varios miles de registros.
Tras trabajar con estos nombres, tengo una tabla final en la que aparecen solo entradas correspondientes a los nombres nuevos:
Así pues, he de reemplazar en el mismo archivo (tabla) todos los nombres nuevos por sus correspondientes antiguos (están todos incluidos en el txt que mencioné al principio).
Como no se me ocurría otra forma de hacerlo decidí ejecutar un oneliner para que reemplazase cada Nombre_nuevo por el Nombre_antiguo (no se me ocurre cómo editar el archivo y luego escribirlo una vez hechos todos los reemplazos).
Aquí os dejo el código por sí podéis ayudarme.
El problema es que parece que se hacen múltiples renombrados uno sobre otro y terminan duplicándose los nombres de varias entradas... Vamos, que el oneliner no funciona correctamente dentro del bucle for (o ese creo yo que debe ser el fallo).
Un saludo.
Tengo un problemilla que no sé muy bien cómo enfocar en el título de este mensaje.
La historia es que tengo una tabla cuyos campos tienen un identificador que modifiqué en su día, y cuyo nombre original guardé en un txt junto a su nuevo nombre en formato:
Using text Syntax Highlighting
Nombre_nuevo1 Nombre_antiguo1
Nombre_nuevo2 Nombre_antiguo2
Nombre_nuevo3 Nombre_antiguo3
Nombre_nuevo4 Nombre_antiguo4
Nombre_nuevo2 Nombre_antiguo2
Nombre_nuevo3 Nombre_antiguo3
Nombre_nuevo4 Nombre_antiguo4
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Y así varios miles de registros.
Tras trabajar con estos nombres, tengo una tabla final en la que aparecen solo entradas correspondientes a los nombres nuevos:
Using text Syntax Highlighting
Nombre_nuevo1 Nombre_nuevo43 Nombre_nuevo17 Nombre_nuevo1245 ...
Nombre_nuevo2 Nombre_nuevo4 Nombre_nuevo37 Nombre_nuevo125 ...
Nombre_nuevo3 Nombre_nuevo51 Nombre_nuevo69 Nombre_nuevo342 ...
Nombre_nuevo2 Nombre_nuevo4 Nombre_nuevo37 Nombre_nuevo125 ...
Nombre_nuevo3 Nombre_nuevo51 Nombre_nuevo69 Nombre_nuevo342 ...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Así pues, he de reemplazar en el mismo archivo (tabla) todos los nombres nuevos por sus correspondientes antiguos (están todos incluidos en el txt que mencioné al principio).
Como no se me ocurría otra forma de hacerlo decidí ejecutar un oneliner para que reemplazase cada Nombre_nuevo por el Nombre_antiguo (no se me ocurre cómo editar el archivo y luego escribirlo una vez hechos todos los reemplazos).
Aquí os dejo el código por sí podéis ayudarme.
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use strict;
- use Getopt::Long;
- #usage example: perl /storage/Runs/CIC/ANALYSIS/JL_scripts/GetbackIDs.pl -p /storage/... -e txt
- #requiere un archivo de secuencias y una "base de datos de IDs" en formato ".txt" que se llamen igual
- my ($path, $ext);
- GetOptions(
- 'path=s' => \$path,
- 'extension=s' => \$ext,
- );
- print "$path\n";
- chdir $path or die "ERROR: Unable to enter $path: $!\n";
- opendir (TEMP , ".");
- my @files = readdir (TEMP);
- closedir TEMP;
- print "@files\n";
- my $name;
- my @db;
- for my $file (@files) {
- if($file=~/(\w+).$ext/){
- $name = "$1";
- print"This is the Filename: $file\n";
- open (INFILE, "$file") || die ("cannot open input file");
- chomp(my @data = <INFILE>);
- my$file2= "$name.bd";
- print"This is the DBname:$file2\n";
- open (DB, "$file2") || die ("cannot open input file");
- chomp(@db = <DB>);
- }
- #Reemplazo "on the fly" via One-Liner
- for(@db){
- my ($dbid,$firstid) = split(/\t/, $_);
- chomp $firstid;
- print"This is my $dbid and its $firstid\n";
- ##ONELINER #si matchea la id, hacemos cambio
- my$susti=`perl -pi -e 's/$dbid/$firstid/g' $name.$ext`;
- }
- }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
El problema es que parece que se hacen múltiples renombrados uno sobre otro y terminan duplicándose los nombres de varias entradas... Vamos, que el oneliner no funciona correctamente dentro del bucle for (o ese creo yo que debe ser el fallo).
Un saludo.