Lo que necesito es leer todos los archivos, ordenarlos por hora, e intercalar los archivos 'U' y 'V', ¡pero con una columna para cada archivo! Como en el script anterior, pero intercalando las componentes 'U' y 'V'. La hora aparece al final de cada archivo_hh.dat.
Aquí muestro un script en el que se hace lo mismo (bueno,las unidades en las columnas no están alineadas si hay algún valor negativo) pero prefiero conocer cómo se haría con su script anterior que llama use Data::CTable.
Muchas gracias!
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.10;
- # use Class::Date qw(date now);
- # The file list
- my @arxiusu = </home/enric/ASCII/2012032300/UGRD10m*.dat>;
- my @arxiusv = </home/enric/ASCII/2012032300/VGRD10m*.dat>;
- # Loop over the first filelist and count with $i
- # You can open file u and v at position $i in the file arrays (in @arxiusu and @arxiusv)
- $i = 0;
- foreach $arxiuu (@arxiusu) {
- print "reading ", $arxiuu, "\n";
- @uval = ();
- open( ARXU, "<$arxiusu[$i]" );
- while (<ARXU>) {
- chomp;
- next unless length;
- $val = sprintf( "%.2f", $_ );
- # write the line (which is one value) into array @uval)
- push( @uval, $val );
- }
- close(ARXU);
- @vval = ();
- open( ARXV, "<$arxiusv[$i]" );
- while (<ARXV>) {
- chomp;
- next unless length;
- $val = sprintf( "%.2f", $_ );
- # write the line (which is one value) into array @vval)
- push( @vval, $val );
- }
- close(ARXV);
- $j = 0;
- # now loop over array @uval and again count with $j, so you can read
- # u and v at position $j in @uval and @vval
- foreach $uval (@uval) {
- # make a pair of u\tv and store it in an array %data under key <$i>_<$j>
- # $i is the counter for the files which is timestamp
- # $j is the counter for the line in file, which is gridpoint
- $data{ $i . "_" . $j } = $uval[$j] . "\t" . $vval[$j];
- $j++;
- }
- $i++;
- }
- # now foreach gridpoint loop over time, which is loop from $j=1 (ommit first line..., so start with 1)
- # to last file and inside this loop you loop over time.
- for ( $j1 = 1; $j1 < $j; $j1++ ) {
- $line = "";
- for ( $i1 = 0; $i1 < $i; $i1++ ) {
- $line = $line . $data{ $i1 . "_" . $j1 } . "\t";
- }
- $line =~ s/\t$//g;
- $output = $output . $line . "\n";
- }
- $file = "vents2.dat";
- open( DATA, ">$file" );
- print DATA $output;
- close(DATA);
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4