如何在perl脚本中将输入文件作为循环?

时间:2012-07-26 17:16:26

标签: perl

我使用下面的脚本来比较两个文件:UEDP35.txtBB_UEDP35.txt。如果我手动输入,但是现在我需要更多的东西,这个脚本效果很好。

在一个文件夹中,我有许多文件,例如UEDP35.txt。例如:UEDP1.txtUEDP2.txtUEDP3.txt等。类似地,还有另一组文件,例如BB_UEDP35.txt,例如BB_UEDP1.txtBB_UEDP2.txtBB_UEDP3.txtUEDP在两个文件名中都很常见。

如果有一对匹配的UEDP编号,那么我想将这两个文件作为脚本的输入。如果在比较它们时发现任何差异,则必须将它们写入另一个新文件。这必须以循环方式完成。

use warnings;
use strict;

open AIN, "<UEDP35.txt ";
open BIN, "<BB_UEDP35.csv";

my %seen;
while (<ain>) {
  my $v = (split(/,/))[0];
  $seen{$v}++;
}

while (<bin>) {
  my $v = (split)[0];
  print "$vn" if not $seen{substr($v, 0, 5)};
}

close AIN;
close BIN;

ls -1 UEDP* | while read line; do f1=echo $line | cut -f1 -d'.' ; f2=ls -1 BB_UEDP* | grep $f1;f3=echo $line | cut -f1; ./test.sh $f3 $f2;done

示例:我有两个文件:A.txtB.txt。在文件A.txt中,第一个文件的数字为五位数。在文件B.txt中,给出了整数。如果文件A.txt的前五位与第二个文件B.txt不匹配,那么我需要将B.txt中的数字打印到另一个文件。

A.TXT

81270,UEDP35

81274,UEDP35

87562,UEDP35

89537,UEDP35

90050,UEDP35

B.txt

8127047667

8756209276

9956176149

8127463873

8953713146

9935805068

此处A.txtUEDP35.txtB.txtBB_UEDP35.txt

1 个答案:

答案 0 :(得分:0)

use strict;
use warnings;

for my $bb_uedp_file (<BB_UEDP*>) {
  if ($bb_uedp_file =~ /BB_UEDP(\d+)/) {
    my $uedp_file = "UEDP$1.txt";
    open AIN, "<$uedp_file"    or die($uedp_file);
    open BIN, "<$bb_uedp_file" or die($bb_uedp_file);
    # ...  rest of the script ...
    close AIN;
    close BIN;
  }
}