2016-04-29 2 views
1

Пожалуйста, помогите.Perl, выделить конкретные столбцы

У меня есть два файла (file1 и file2). Я хотел бы извлечь столбцы из файла2, которые имеют свои идентификаторы, перечисленные в файле1. Это большие файлы с тысячами столбцов и строк.

file1

Id123B 
Id124A 
Id125A 

file2

Code sex id123B id127 id125A 

желаемого выходного файла:

code sex id123B id125A 

Ниже приведен код, который я попробовал, но ничего не получается.

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

open my $IN, "file2" or die $!; 

my $header = <$IN>; 

my %sampleID = map { /(.*?)\t/; $1 => 1 } <$IN>; 

close($IN); 

open $IN, "file1" or die $!; 
$header = <$IN>; 
my @samples = split /\t/, $header; 
my @cols = grep { exists $sampleID{$samples[$_]} } 0..$#samples; 


while(<$IN>){ 
    chomp; 
    my @line = (split /\t/)[@cols]; 

    print join("\t", @line), "\n"; 
} 

ответ

0

Использовать хэш для сопоставления имен столбцов с номерами столбцов.

#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw{ say }; 

open my $COLUMNS, '<', shift or die $!; 
chomp(my @columns = <$COLUMNS>); 

open my $DATA, '<', shift or die $!; 
my @header = split /\t/, <$DATA>; 
my %column_index; 
@column_index{ @header } = 0 .. $#header; 

@columns = grep exists $column_index{$_}, @columns; 

while (<$DATA>) { 
    chomp(my @cells = split /\t/); 
    say join "\t", @cells[ @column_index{ @columns } ]; 
} 

Выполняется script.pl file1 file2. Обратите внимание, что вы должны использовать точные имена столбцов в файле, т. Е. Я получил лучшие результаты со следующим файлом1:

Code 
sex 
id123B 
id124A 
id125A 
+0

Большое спасибо за помощь. Я просто запускал его и не печатал какой-либо вывод. Возможно, формат данных? –

+0

@ El.h Возможно, это работает для меня. Проверьте имена столбцов. – choroba

Смежные вопросы