Práctica: Granja con Pipes

Adapte el ejemplo de la sección 3.14.1 para realizar una granja que -utilizando el comando sort - ordene numéricamente un conjunto de ficheros numéricos (para ello use la opción -g de sort ) produciendo como salida un unico fichero ordenado. El granjero mezclará los vectores ordenados (opción -m de sort) devueltos por los trabajadores. El código muestra una posible versión de la función de combinación:
sub combineFunction {
  $_[0] = `echo -n '$_[1]' | sort -m -g - /tmp/sorted.dat`;
  open(SORTED, ">/tmp/sorted.dat");
  print SORTED $_[0];
  close(SORTED);
}
En una primera versión puede asumir - si lo desea - un sistema de archivos compartido. Realice una segunda versión en la que no asuma la existencia de NFS: el fichero o vector a ordenar deberá ser transferido al disco del trabajador. Para ello amplíe farm con la capacidad de transferir los ficheros de un directorio local a directorios remotos. Haga perldoc -f rand para obtener información sobre la función de generación aleatoria de números. El siguiente programa puede ser usado para generar los datos:
!/usr/bin/perl -w
# Ej:
#  create_data.pl 5 data/data 500 5 6 7 8 9
use strict;

my $numFich = shift || 3;
my $prefix  = shift || 'data';
my $max_val = shift || 10000;

die "Uso: $0 num_fich prefijo Max len1 len2 ... lenN\n" unless (@ARGV == $numFich);

{
        local $" = "\n";
        for(my $i = 0; $i < $numFich; $i++){
                my @nums = map { int (rand($max_val)) } 1..shift;
                open F,"> $prefix$i.dat";
                print F "@nums";
                close(F);
        }
}

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19