转置数据 - 向 Perl 脚本添加附加列的更简单方法

转置数据 - 向 Perl 脚本添加附加列的更简单方法

我下面有一个 perl 脚本,它做得非常出色,但是,我多么想在更大的文件上执行相同的任务。下面的脚本设计用于包含 15 列的文件,其中数据从 4 (12-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";
    }
}

相关内容