Página 1 de 1

Extraer columnas de un archivo txt usando un array

NotaPublicado: 2017-12-18 21:27 @935
por abraham03
Hola, tengo unos datos en un archivo txt, los datos están separados por columnas (tab), algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#Var    columnA columnB columnC columnD …..columnZ
x1      1       3       7       0.9     …1
x2      5       3       13      7       …2
x3      0.1     0.8     7       1       …3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y estoy tratando de hacer un script para extraer una o varias columnas, según se requiera (las columnas de extracción nunca son las mismas, es decir no puedo usar un número fijo para extraerlas), solo que no he podido hacer que extraiga las columnas que deseo.

Asumiendo que quiero extraer las columnas A y C, al final quedaría algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#Var    columnA columnC
x1      1       7
x2      5       13
x3      0.1     7
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my @wanted_fields = qw/columnA columnC/;
  6.  
  7. open DATA, '<', "columns.txt" or die "cant open file\n";
  8.  
  9. my @datain = <DATA>;
  10. close DATA;
  11.  
  12. my ( @unit_name, $names, @lines, @conteo, @column_match, @names_match );
  13.  
  14. foreach (@datain) {
  15.     if    ( $_ =~ m/^$/g )      { next; }
  16.     elsif ( $_ =~ m/#Genera/g ) { $names = $_; }
  17.     else                        { push @lines, $_ }
  18. }
  19.  
  20. @unit_name = split( /\t/, $names );
  21. shift @unit_name;
  22. my $count = 0;
  23.  
  24. foreach (@wanted_fields) {
  25.     my $unit_wanted = $_;
  26.     chomp $unit_wanted;
  27.     foreach (@unit_name) {
  28.         if ( $_ =~ m/$unit_wanted/g ) {
  29.             $count++;
  30.             push( @conteo, $count );
  31.         }
  32.     }
  33. }
  34.  
  35. foreach (@lines) {
  36.     chomp;
  37.     my @columnas = split( /\t/, $_ );          # ¡¡¡ aquí es donde quería usar un loop con @conteo y extraer cada columna !!!
  38.     print "$columnas[0]\n";
  39. }
  40.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias.

Re: Extraer columnas de un archivo txt usando un array

NotaPublicado: 2017-12-19 00:20 @055
por explorer
Es un tema que ya hemos tratado alguna vez. Incluso existen unos cuantos módulos en CPAN.


Re: Extraer columnas de un archivo txt usando un array

NotaPublicado: 2017-12-19 13:35 @608
por abraham03
Genial. Lo voy a revisar. ¡¡ Gracias por responder !!