如何将一列中的两个文件合并到一个文件中,并在Piglatin中使用两列

时间:2014-03-07 21:20:20

标签: ruby perl apache-pig

我有一个文件

A  
B   
C

其他是

100  
101  
102  

我想在PigLatin中将这两个文件合并在一起(即第一列与第一列合并)

A 100      
B 101  
C 102 

3 个答案:

答案 0 :(得分:1)

很简单:

File.write('first_file',<<_)
A  
B   
C
_
File.write('second_file',<<_)
100  
101  
102
_

我首先使用IO::readlines来获取每个文件的所有行。

# strip method is used here to stripped out the line separator from
# the end of the each line.
ary1 = File.readlines('first_file').map(&:strip) 
ary2 = File.readlines('second_file').map(&:strip)

然后我使用IO::open方法在 write 模式下打开文件new_file。阅读Array#zip以了解我使用此方法的原因。

File.open('new_file','w') do |file|
    ary1.zip(ary2) do |a|
        file.write(a.join(" ")+"\n")
    end
end

IO::foreach方法为指定的I/O端口中的每一行执行块,其中行以sep

分隔
File.foreach('new_file') do |line|
  puts line
end
# >> A 100
# >> B 101
# >> C 102

答案 1 :(得分:0)

use File::Slurp qw(read_file write_file);
use List::Util qw(pairmap);

use strict;
use warnings;

chomp(my @file1 = read_file('file1.txt'));
chomp(my @file2 = read_file('file2.txt'));

write_file('outfile.txt', pairmap { "$a $b\n" } @file1, @file2);

答案 2 :(得分:0)

这很好用,可能值得一看。它期望输入文件的路径作为命令行上的参数。

use strict;
use warnings;
use autodie;

my @fh = map {
  open my $fh, '<', $_;
  $fh;
} @ARGV;

while (grep { not eof $_ } @fh) {
  my @columns = map <$_> // 'empty', @fh;
  chomp @columns;
  print "@columns\n";
}

<强>输出

A 100
B 101
C 102