Недостатком этого, конечно, является то, что вы должны использовать номера столбцов вместо имен.

я есть текстовый файл, как это:

#Genera columnA columnB columnC columnD columnN
x1       1       3       7      0.9      2
x2       5       3       13     7        5
x3       0.1     0.8     7      1        0.4

и я хочу извлечь определенное количество столбцов X, просто предположим, что мы хотим столбцы A, columnC и columnN (это может быть матрица с 1, 2, 20, 100 или более столбцами) и что я хочу напечатать OUT (этот пример всего 3 но может быть и больше)

#Genera columnA columnC columnN
    x1   1       7       2
    x2   5       13      5
    x3   0.1     7       0.4

я пытался

#!/usr/bin/perl
use strict;
use warnings;


my @wanted_fields = qw/columnA columnC columnN/;

open DATA, '<', "columns.txt" or die "cant open file\n";


my @datain = <DATA>;
close DATA;

my (@unit_name, $names, @lines, @conteo, @match_names, @columnas);

foreach (@datain){
    if ($_=~ m/^$/g)            {   next;           }
    elsif ($_=~ m/#Genera/g)    {   $names= $_;     }
    else                        {   push @lines, $_ }
}


@unit_name = split (/\t/, $names);
shift @unit_name;
my $count =0;

    foreach (@wanted_fields){
        my $unit_wanted =$_;
        chomp $unit_wanted;
        foreach (@unit_name){
            if ($_ =~ m/$unit_wanted/g){
                $count++;
                 push (@conteo, $count);
                 push (@match_names, $_);
                }
        }
    }


    foreach (@lines){
        chomp;
        @columnas = split (/\t/, $_);
            #push @xx, $columnas[0][3];

    }

Я использовал счетчик, чтобы определить столбец для извлечения, но в этом случае число 2 не соответствует столбцу C, а 3 не соответствует столбцу N хорошо ...... это любой простой способ выбрать любые столбцы, в этом case я просто хочу 3, но в зависимости от case может быть 1,2 5, 10, 100 или более столбцов

Спасибо

 Flying_whale20 дек. 2017 г., 10:09
Можете ли вы добавить строку с печатью и результат, который вы получили? :)
 Flying_whale20 дек. 2017 г., 10:33
да, забыл, что если "пробел" может варьироваться между всеми возможными пробелами (tab, space, \ n, ...), используйте \ s + вместо \ t;) Не думайте, что это причина, по которой ваш код не работает, но это может быть полезно для дальнейшего использования :)
 Sobrique20 дек. 2017 г., 11:10
DATA это специальный дескриптор файла в Perl. Вы, вероятно, не должны использовать это.
 ssr101220 дек. 2017 г., 10:25
это разделитель табуляции?

Ответы на вопрос(0)

Ваш ответ на вопрос