Extraer palabras con múltiples opciones
Publicado: 2016-08-05 16:30 @729
Hola.
¿Cómo hago para agregar una búsqueda y extracción de diferentes combinaciones de palabras?
Tengo un archivo de texto como este:
y quiero extraer la primera, y si existe, una segunda palabra (pero no la tercera) que tenga la terminación en 'ales' de cada línea y que se imprima como
La segunda siempre termina como estos ejemplos:
es decir: \w*ales_incertae_sedis
Ignorar si presenta una tercera como aparece en Bacillales_Family.
El problema que tengo es una coincidencia con múltiples opciones en la línea
Este es el código:
He intentado esto:
pero no me resuelve el problema.
Muchas gracias.
¿Cómo hago para agregar una búsqueda y extracción de diferentes combinaciones de palabras?
Tengo un archivo de texto como este:
Using text Syntax Highlighting
#name_file
Bacteria;WS3;PRR-12;SSS58A 0.0 0.12 0.6
Bacteria;WS3;PRR-12;Sediment-1 0.5 0.1 0.3
Bacteria;Terrabacteria_group;Firmicutes;Bacilli; unclassified_Bacillales;Bacillaceae;Vulcanibacillu 0.2 0.2 0.6
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillaceae;Vulcanibacillu 0.2 0.2 0.6
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillales_incertae_sedis;Bacillales_Family_X 0.1 0.3 0.5
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillales_incertae_sedis;Bacillales_Family_X._Incertae_Sedis;Thermicanus 0.4 0.13 0.9
Bacteria;Nitrospirae;Nitrospira;Nitrospirales;Thermodesulfovibrionaceae 0.1 0.2 0.6
Bacteria;Nitrospirae;Nitrospira;Nitrospirales;Thermodesulfovibrionaceae;BD2-6 0.0 0.0 0.6
Bacteria;PVC_group;Lentisphaerae;Lentisphaeria;Lentisphaerales 0.7 0.2 0.1
Bacteria;WS3;PRR-12;SSS58A 0.0 0.12 0.6
Bacteria;WS3;PRR-12;Sediment-1 0.5 0.1 0.3
Bacteria;Terrabacteria_group;Firmicutes;Bacilli; unclassified_Bacillales;Bacillaceae;Vulcanibacillu 0.2 0.2 0.6
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillaceae;Vulcanibacillu 0.2 0.2 0.6
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillales_incertae_sedis;Bacillales_Family_X 0.1 0.3 0.5
Bacteria;Terrabacteria_group;Firmicutes;Bacilli;Bacillales;Bacillales_incertae_sedis;Bacillales_Family_X._Incertae_Sedis;Thermicanus 0.4 0.13 0.9
Bacteria;Nitrospirae;Nitrospira;Nitrospirales;Thermodesulfovibrionaceae 0.1 0.2 0.6
Bacteria;Nitrospirae;Nitrospira;Nitrospirales;Thermodesulfovibrionaceae;BD2-6 0.0 0.0 0.6
Bacteria;PVC_group;Lentisphaerae;Lentisphaeria;Lentisphaerales 0.7 0.2 0.1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y quiero extraer la primera, y si existe, una segunda palabra (pero no la tercera) que tenga la terminación en 'ales' de cada línea y que se imprima como
Using text Syntax Highlighting
Bacillales
Bacillales;Bacillales_incertae_sedis
Bacillales;Bacillales_incertae_sedis
Nitrospirales
Nitrospirales
Lentisphaerales
Bacillales;Bacillales_incertae_sedis
Bacillales;Bacillales_incertae_sedis
Nitrospirales
Nitrospirales
Lentisphaerales
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
La segunda siempre termina como estos ejemplos:
Using text Syntax Highlighting
Bacillales_incertae_sedis, Nitrospirales_incertae_sedis
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
es decir: \w*ales_incertae_sedis
Ignorar si presenta una tercera como aparece en Bacillales_Family.
El problema que tengo es una coincidencia con múltiples opciones en la línea
Using perl Syntax Highlighting
- my (@orden) = ($taxon=~ m/(\w*ales)[\;]?/g)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Este es el código:
Using perl Syntax Highlighting
- use strict;
- use warnings;
- use Getopt::Long;
- GetOptions( 'i=s' => \$infile, );
- open INFILE, '<', "$infile", or die "cant open file $infile";
- open OUTFILE, '>', "$results.txt" or die "cant open";
- while (<INFILE>) {
- my $line = $_;
- chomp($line);
- if ( $line =~ m/^#/g ) {
- next;
- }
- elsif ( $line =~ m/^$/g ) {
- next;
- }
- elsif ($line) {
- my @taxonomic = $_;
- foreach (@taxonomic) {
- ( $taxon, $val1, $val2, $val3 ) = split( /\t/, $_ );
- }
- # here is the problem
- my (@orden) = ( $taxon =~ m/(\w*ales)[\;]?/g );
- foreach (@orden) {
- if ( $_ =~ m/^$/g ) {
- next;
- }
- elsif ( $_ =~ m/^unclassified/g ) {
- next;
- }
- else {
- print OUTFILE "$_\n";
- }
- }
- close INFILE;
- close OUTFILE;
- exit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
He intentado esto:
Using perl Syntax Highlighting
- my (@orden) = ($taxon=~ m/(\w*ales)[\;]?(;\w*ales_incertae_sedis)/g);
- my (@orden) = ($taxon=~ m/(\w*ales[;\w*ales_incertae_sedis]?)[\;]?/g);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero no me resuelve el problema.
Muchas gracias.