データの転置 - Perlスクリプトに追加の列を追加する簡単な方法

データの転置 - Perlスクリプトに追加の列を追加する簡単な方法

以下は素晴らしい仕事をするPerlスクリプトですが、大きなファイルで同じことをする方法は何ですか?次のスクリプトは、データが4(12-15)から変更される15列を含むファイルで動作するように設計されています。 12-2550列まで拡張する必要があります。追加のifステートメントを手動で追加するよりも簡単な方法はありますか?

#! /usr/bin/perl5.8.6 -w

$input = "Baillie.txt";
$output = "Baillie_edited.txt";


open OUTPUT_FILE_HANDLE, ">$output";
close OUTPUT_FILE_HANDLE;
open OUTPUT_FILE_HANDLE, ">>$output";

open INPUT_FILE_HANDLE, "<$input";

$counter = 1;
while (<INPUT_FILE_HANDLE>) {
#print $_;
chomp();
if ($counter == 1) {
    print OUTPUT_FILE_HANDLE "sample\t".$_."\n";
    @header = split /\t/, $_;
}
else {
    $orig_line = $_;
    @line = split /\t/, $_;
        if ($line[12] == 1|1 or $line[12] == 0|1 or $line[12] == 1|0) {
            print OUTPUT_FILE_HANDLE $header[12]."\t".$orig_line."\n";
        }
        if ($line[13] == 1|1 or $line[13] == 0|1 or $line[13] == 1|0) {
            print OUTPUT_FILE_HANDLE $header[13]."\t".$orig_line."\n";
        }
        if ($line[14] == 1|1 or $line[14] == 0|1 or $line[14] == 1|0) {
            print OUTPUT_FILE_HANDLE $header[14]."\t".$orig_line."\n";
        }
        if ($line[15] == 1|1 or $line[15] == 0|1 or $line[15] == 1|0) {
            print OUTPUT_FILE_HANDLE $header[15]."\t".$orig_line."\n";
        }
    }
}
#last if ($counter eq 100000);
$counter++;
close OUTPUT_FILE_HANDLE;
close INPUT_FILE_HANDLE;
exit;

ベストアンサー1

これを試みなさい: まず、常に置きなさいシェルボーン use strict; use warnings;。次に、このforループを使用します(必要に応じてロジックを調整します)。

foreach my $count (12..2550) {
    if ($line[$count] == 1|0) {
        print OUTPUT_FILE_HANDLE $header[$count]."\t".$orig_line."\n";
    }
}

おすすめ記事