ファイルのリストに基づいて列を削除する

ファイルのリストに基づいて列を削除する

ファイルから列を削除するのに問題があります。

input.tsv:

Otu1    otu2    otu3    otu4    otu5
1   2   5   9   3
8   9   8   4   2

ヘッダーがファイルにリストされている場合は、列を削除したいと思いますremove.txt。たとえば、次のようになります。

otu2
otu3

結果は次のとおりです。

Otu1    otu4    otu5
1   9   3
8   4   2

どうすればいいですか?

ベストアンサー1

Perlを使った例

Cols.plを削除する:

#!/usr/bin/perl

my $file1="input.tsv";
my $file2="remove.txt";

open RFILE, $file2;
@cols=<RFILE>;

open INPUT, $file1;

#read header line, save indicies
my @header = split( /\t/, <INPUT> );

for my $i (0..$#header){
    if (grep(/$header[$i]/, @cols)){
        push @idx,$i;
        $header[$i] = undef;
    }
}
print join("\t",grep(defined,@header));


# loop remaining file
while(<INPUT>){
    my @line = split(/\t/, $_);
    $line[$_] = undef for (@idx);
    print join("\t",grep(defined,@line));
}

コマンドラインは次のように実行されます。

ヒント > perl RemoveCols.pl

おすすめ記事