파일의 목록을 기반으로 열 삭제

파일의 목록을 기반으로 열 삭제

파일에서 열을 제거하는 데 문제가 있습니다.

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

관련 정보