Transposição de dados - maneira mais fácil de adicionar colunas adicionais ao script Perl

1

Eu tenho um script perl abaixo que faz um trabalho fantástico, no entanto, eu quero executar a mesma tarefa, mas em um arquivo maior. O script abaixo é projetado para uso em um arquivo contendo 15 colunas, cujos dados são transpostos de 4 (12-15). Eu preciso estender isso para colunas 12-2550. Existe uma maneira mais fácil de fazer isso além de adicionar manualmente instruções if adicionais?

#! /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;
    
por Roxane Dunbar 13.02.2018 / 16:05

1 resposta

2

Tente isto: De fato, coloque sempre depois do shebang use strict; use warnings; . Então, use este loop (adapte a lógica às suas necessidades):

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

Tags