데이터 전치 - 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";
    }
}

관련 정보