问题与for循环中的条件

时间:2015-12-09 15:31:48

标签: perl

我的脚本中有两个由$outputfile6$outputfile7表示的文件。两个文件具有相同的内容(所有字段都相同),并且在此方案中总共有10个字段。虽然两个文件都是相同的,但我没有在文件中获取任何内容:$outputfile2。以下是代码。

open my $outputfile2, ">", "hung_jobs.txt"              or die $!;

open my $outputfile6, "<", "active_jobs_all_fields.txt" or die $!;
open my $outputfile7, "<", "hung_jobs_old.txt"          or die $!;

my @arr  = <$outputfile6>;
my @arr1 = <$outputfile7>;

foreach my $line2 (@arr) {
   chomp $line2;
   my @split = split( ' ', $line2 );

   foreach my $line3 (@arr1) {
      chomp $line3;
      my @split1 = split( ' ', $line3 );

      if ( $split[9] == $split1[9] ) {
         print $outputfile2 "Hello";
         print $outputfile2 "$split[0] $split[3] $split[5] $split[6] \n";
      }

      print $outputfile5 $outputfile2;
   }
}

2 个答案:

答案 0 :(得分:2)

你没有足够的证据证明你的问题,所以我不确定问题是什么。

但我想指出这种方法很糟糕。如果两个文件中都有1,000行,那么您最终将执行循环体1,000,000次。在同一场景中,以下仅执行每个循环体1000次:

temp = 0 # temperature
valve = 0 #control temperature

while True :
  if temp = 30
    valve =+ 20
    print "temp now 30 and valve 20"
  elif temp = 40
    valve =+ 40
    print "temp now 40 and valve 40"
  else
    print "temp n and valve n"

time.sleep(5) #looping 5 second not happen i get error

答案 1 :(得分:-1)

目前尚不清楚问题所在。当我拍摄脚本并添加一些诊断打印时,如下所示:

#!/usr/bin/env perl
use strict;
use warnings;

$, = " ";
open my $outputfile2, ">", "hung_jobs.txt"              or die $!;
open my $outputfile6, "<", "active_jobs_all_fields.txt" or die $!;
open my $outputfile7, "<", "hung_jobs_old.txt"          or die $!;
my @arr  = <$outputfile6>;
my @arr1 = <$outputfile7>;
print "arr = ", scalar(@arr), ", arr1 = ", scalar(@arr1), "\n";
foreach my $line2 (@arr) {
   chomp $line2;
   my @split = split( ' ', $line2 );
   print "S0:", @split;
   foreach my $line3 (@arr1) {
      chomp $line3;
      my @split1 = split( ' ', $line3 );
      print "S1:", @split1;
      if ( $split[9] == $split1[9] ) {
         print $outputfile2 "Hello";
         print $outputfile2 "$split[0] $split[3] $split[5] $split[6] \n";
         print "$split[0] $split[3] $split[5] $split[6]\n";
      }
      #print $outputfile5 $outputfile2;
   }
}

当我创建两个数据文件时:

$ cat active_jobs_all_fields.txt
f1 f2 f3 f4 f5 f6 f7 f8 f9 10
$ cat hung_jobs_old.txt
g1 g2 g3 g4 g5 g6 g7 g8 g9 10
$

然后当我运行它时,我会看到:

$ perl -l x37.pl
arr =  1 , arr1 =  1 

S0: f1 f2 f3 f4 f5 f6 f7 f8 f9 10
S1: g1 g2 g3 g4 g5 g6 g7 g8 g9 10
f1 f4 f6 f7

$ cat hung_jobs.txt
Hello
f1 f4 f6 f7 

$

这似乎符合你的要求。所以不清楚你的问题是什么。

杂散空白行可归因于-l选项。在Mac OS X 10.11.2上测试Perl 5.22.0(基于早期版本)。