
以下は素晴らしい仕事をする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";
}
}