Недостатком этого, конечно, является то, что вы должны использовать номера столбцов вместо имен.
я есть текстовый файл, как это:
#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 или более столбцов
Спасибо