[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]Ulfang Meere dijo [Tue, May 02, 2006 at 08:44:23PM +0700]: > Estimados Gurus de la Línea de Comandos: > > Tengo dos archivos de texto. El primero de ellos tiene una serie de > parejas, digamos palabras y sinónimos: > > contento, alegre > fallo, error > butaca, silla > . > . > . > . > > El segundo es un archivo que contiene un discurso o conferencia de > gran extensión. > > La idea es buscar la primera palabra del primer archivo dentro del > segundo archivo y substituirla por la segunda palabra, así para todos > los pares del primer archivo. > > ¿Qué herramientas se debe usar? ¿sed? ¿awk? Hummm, me suena como una bonita aplicación para el envío de spam! Va algo sin probar... Puede que no funcione, pero te da la idea. Comparto la idea de Salvador: Perl te resulta mejor que andar encadenando comanditos de shell para algo de esta complejidad. No que no se pueda, pero no creo que te convenga. Espero que con "de gran extensión" no te refieras a "varios megabytes", porque este script por simplicidad trabaja todo sobre memoria, no línea por línea. Escribo buscando legibilidad más que practicidad (esto es: Perleros, sí, esto mismo puede hacerse en mucho menos espacio ;-) ) ---------------------------------------------------------------------- #!/usr/bin/perl my (%config, %sinonimos, $texto, $fh); %config = (origen => 'archivo1.txt', sinonimos => 'sinonimos.txt', destino => 'archivo2.txt'); open($fh, '<', $config{sinonimos}) or die $!; while (my $lin = <$fh>) { chomp $lin; unless ($lin =~ /(.*),\s*(.*)/) { warn "Error de formato en sinónimos: $lin"; next; } $sinonimos{$1} = $2; } close($fh); open($fh, '<', $config{origen}) or die $!; $texto = join('', <$fh>); close($fh); for my $palabra (keys %sinonimos) { $texto =~ s/$palabra/$sinonimos{$palabra}/g; } open($fh, '>', $config{destino}) or die $!; print $fh $texto; close($fh); ---------------------------------------------------------------------- Saludos, -- Gunnar Wolf - gwolf en gwolf org - (+52-55)5623-0154 / 1451-2244 PGP key 1024D/8BB527AF 2001-10-23 Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF