根据文件中的列表删除列

根据文件中的列表删除列

我在从文件中删除列时遇到问题。

input.tsv

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

如果列的标题列在 file 中,我想删除该列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

相关内容