Chinaunix

标题: 文件合并问题! [打印本页]

作者: 月光宝盒    时间: 2003-03-12 11:22
标题: 文件合并问题!
文件file1:
103         16
104           8
文件file2:
103                   38
104                   35
606                 2154
682                  199
需合并为:
103      16      38
104      8        35
606               2154
682               199
应该如可写?
作者: eliumao    时间: 2003-03-12 11:44
标题: 文件合并问题!
用perl比较方便
-----------------------------------------------------
#!/usr/bin/perl -w
use strict;
open File1,"<file1";
open File2,"<file2";
my %FILE1;
my %FILE2;
while(<File1>{
        chomp;
        my @temp=split;
        $FILE1{$temp[0]}=$temp[1];
}
while(<File2>{
        chomp;
        my @temp=split;
        $FILE2{$temp[0]}=$temp[1];
}
foreach(sort keys %FILE2){
        print $_." ";
        print $FILE1{$_}." " if ($FILE1{$_});
        print $FILE2{$_}."\n";
}
---------------------------------------------------
作者: 月光宝盒    时间: 2003-03-12 11:59
标题: 文件合并问题!
多谢了!
作者: bzzyg    时间: 2003-03-13 15:10
标题: 文件合并问题!
哪位高手用awk语句写一下?
作者: 冷风    时间: 2003-03-13 15:29
标题: 文件合并问题!
偶也想知道
偶还想知道哪里可以买到权威的awk权威指南
作者: swysn    时间: 2003-03-13 16:09
标题: 文件合并问题!
其实有更简单的办法:
join -a1 file1 file2 > newfile
join -v1 file2 file1 >> newfile
作者: swysn    时间: 2003-03-13 16:10
标题: 文件合并问题!
其实有更简单的办法:
join -a1 file2  file1 > newfile
作者: miling    时间: 2003-03-13 16:49
标题: 文件合并问题!
先将两文件合并:
cat file1 file2 >file3

然后用awk会好用些:
awk '{
????if($1 in aa)
??????for(i=2;i<=NF;i++)
????????aa[$1]=sprintf("%s %s",aa[$1],$i);
????else
??????for(i=2;i<=NF;i++) aa[$1]=sprintf("%s",$i);
??}
?END?{for(i in aa) print i, aa}' file3

在FreeBSD4.7下测试通过。
上面代码只是为了更好看清楚,命令行如下:
awk '{if($1 in aa)for(i=2;i<=NF;i++) aa[$1]=sprintf("%s %s",aa[$1],$i);else for(i=2;i<=NF;i++) aa[$1]=sprintf("%s",$i);}END{for(i in aa) print i, aa}' file3
作者: 红袖添香    时间: 2003-03-13 21:37
标题: 文件合并问题!
[quote]原帖由 "eliumao"]用perl比较方便[/quote 发表:


perl 高手啊,而且喜歡這句口頭禪~~  :)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2