我下面有一个 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";
}
}