2014-10-15 5 views
1

3 개의 CSV 파일을 비교하고 새 출력으로 다른 CSV 파일을 만들려고합니다.PERL 스크립트 3 CSV 파일을 비교하고 새 CSV 파일을 만들려면

파일 1

Name,Color,Food,Point 
    David,Orange,Pasta,12.34 
    Raver,Blue,Pizza,13.35 
    John,Red,Noodles,14.36 
    Armond,Black,Sandwich,15.37 

파일 2

Name,Task 
David,Success 
Raver,Success 
John,Success 
Armond,Failure 

파일 3

,451,515,
Color,Stock 
Orange,Available 
Blue,Available 
Red,OutOfStock 
Black,Available 

출력 파일

Name,Color,Food,Point,Task,Stock 
David,Orange,Pasta,12.34,Success,Available 
Raver,Blue,Pizza,13.35,Success,Available 
John,Red,Noodles,14.36,Success,OutOfStock 
Armond,Black,Sandwich,15.37,Failure,Available 

친절하게 도와주세요. 미리 감사드립니다.

답변

0

나는 여기서 뭔가를 시도했다.

출력

이 작동
Name,Color,Food,Point,Task,Stock 
David,Orange,Pasta,12.34,Success,Available 
Raver,Blue,Pizza,13.35,Success,Available 
John,Red,Noodles,14.36,Success,OutOfStock 
Armond,Black,Sandwich,15.37,Failure,Available 

!

#! /ms/dist/perl5/bin/perl5.10 
use strict; 

my $file1csv = $ARGV[0]; 
my $file2csv = $ARGV[1]; 
my $file3csv = $ARGV[2]; 

open(ff, "<$file1csv"); 
my @file1_array = <ff>; 
close ff; 

open(fg, "<$file2csv"); 
my @file2_array = <fg>; 
close fg; 

open(f, "<$file3csv"); 
my @file3_array = <f>; 
close f; 

open(g, ">Output.csv"); 
print g "Name,Color,Food,Point,Task,Stock\n"; 

foreach my $file1_value (@file1_array) 
{ 
    $file1_value =~s/^\s+|\s+$|\s//igs; 
    $file1_value = $file1_value . ","; 
    print "Processing\n"; 

    if($file1_value =~m/^([^\,]*)\,([^\,]*)\,([\w\W]*)\,$/is) 
    { 
     my $name = $1; chomp($name); 
     my $color = $2; chomp($color); 
     my $remaining = $3; chomp($remaining); 
     # my $point = $4; chomp($point); 
     print "Processing for the name :: $name\n"; 

     my $task; 
     foreach my $file2_value (@file2_array) 
     { 
      $file2_value =~s/^\s+|\s+$|\s//igs; 
      $file2_value = $file2_value.","; 

      if($file2_value =~m/$name\,([^\,]*)\,/is) 
      { 
       $task = $1; chomp($task); 
      } 
     } 

     my $stock; 
     foreach my $file3_value (@file3_array) 
     { 
      $file3_value =~s/^\s+|\s+$|\s//igs; 
      $file3_value = $file3_value.","; 

      if($file3_value =~m/$color\,([^\,]*)\,/is) 
      { 
       $stock = $1; chomp($stock); 
      } 
     } 

     open(g, ">>Output.csv"); 
     print g "$name,$color,$remaining,$task,$stock\n"; 
    } 
} 
close g; 
print "Completed\n"; 
1

당신이 사용할 수있는 2 join의 :

join -t, -j 1 file1 file2 | join -t, -1 2 -2 1 -o 1.1,1.2,1.3,1.4,1.5,2.2 - file3 

설명 :

  • join -t, -j 1 file1 file2가 : 필드 1
  • join -t, -1 2 -2 1 ... - file3에서 처음 두 파일을 결합 : 이전 문이 지금을 나타냅니다 첫 번째 파일 (-). 이 파일은 세 번째 파일과 결합됩니다.
  • -o 1.1,1.2,1.3,1.4,1.5,2.2 : 예제의 출력 순서입니다.
관련 문제