2010-10-07 75 views
1

我有两个文件如何合并两个文件?

文件1:

7118 
7457 
7591 
7539 
8001 

文件2:

5003 
5008 
5011 
5026 
5028 
5029 
5031 

输出,我需要

7118,5003 
7457,5003 
7591,5003 
7539,5003 
8001,5003 
7118,5008 
7457,5008 
7591,5008 
7539,5008 
8001,5008 

等等.....

回答

4
awk 'FNR==NR{a[$0];next}{ for(i in a) print i,$0 }' OFS="," file file1 
+0

user131527感谢它很好.. – gyrous 2010-10-07 10:55:29

+0

太棒了!这么简单的代码,如此复杂! – 2015-05-12 14:32:51

0

我会为此使用perl脚本。

#!/usr/bin/perl 

use strict; 

my @file1 = loadf("file1.txt"); 
my @file2 = loadf("file2.txt"); 

foreach my $line2 (@file2) { 
    $line2 =~ s/^\s+//; 
    $line2 =~ s/\s+$//; 
    for (my $i = 0; $i < @file1; $i++) { 
     $file1[$i] =~ s/^\s+//; 
     $file1[$i] =~ s/\s+$//; 
     #do the output 
     print $file1[$i] . "," . $line2 . "\n"; 
    } 

} 

sub loadf($) { 
    my @file = (); 
    open(FILE, $_[0] . "\n") or die("[-] Couldn't Open " . $_[0] . "\n"); 
    @file = <FILE>; 
    close(FILE); 
    return @file; 
} 
+0

鲁埃尔由于它工作正常。但是你用5来限制输入文件,但这是我给出的一个例子。我不知道我的真实文件中有多少行。我必须为更多这样做。 – gyrous 2010-10-07 10:47:01

+0

我已更新它,它会计算一个文件的行数。 – Ruel 2010-10-07 10:48:35

0

而且bash函数:

function cross() { 
    exec 3<$2 
    while read -u 3 a ; do 
     exec 4<$1 
     while read -u 4 b ; do 
      echo $b,$a 
     done 
    done 
    3<&- 
    4<&- 
} 
0
cat file1 | (exec 3< file2; while read A && read B <&3; do echo "$A,$B"; done)