作者giacch (小a)
看板Perl
标题Re: [问题] 两档案资料合并
时间Mon Mar 22 02:47:57 2010
※ 引述《corny (玉咪)》之铭言:
: 板上网友真是非常热心
: 有人建议我该把问题说清楚才好最佳化
: 我有两个档案
: 这两个档案都是好几万笔
: b_file 的资料会比 a_file 还多
: a_file
: -------------------------
: 1 xxx abc111 abc123 ttt
: 1 zzz abc222 abc124 ggg
: 2 ddd abc333 cde125 ttt
: 4 ggg abc444 cde126 iii
: 4 kkk abc444 abc123 eee
: : : :
: : : :
: -------------------------
: b_file
: -------------------
: 1 abc111 abc123 ddd
: 1 abc112 abc123 ooo
: 1 abc222 abc124 hhh
: 2 abc333 cde124 ddd
: 2 abc333 cde125 uuu
: 4 abc443 abc123 eee
: 4 abc444 cde126 eee
: 4 abc444 abc123 rrr
: : : :
: : : :
: -------------------
: 目标是要找出 b_file 对应到 a_file 的资料
: 也就是在 a_file 每一列的一三四栏只会对应到 b_file 其中一列的一二三栏
: 例如 a_file 第一列一三四栏跟 b_file 第一列的一二三栏是一样的
: a_file 第二列一三四栏跟 b_file 第三列的一二三栏是一样的
: 最後处理成下面这样
: -------------------------------------------
: 1 xxx abc111 abc123 ttt 1 abc111 abc123 ddd
: 1 zzz abc222 abc124 ggg 1 abc222 abc124 hhh
: 2 ddd abc333 cde125 ttt 2 abc333 cde125 uuu
: 4 ggg abc444 cde126 iii 4 abc444 cde126 eee
: 4 kkk abc444 abc123 eee 4 abc444 abc123 rrr
: : : :
: : : :
: -------------------------------------------
: a_file 的每一笔都会保留着
: 只是在後面多了从 b_file 找到相对应的资料
: ※ 编辑: corny 来自: 218.167.225.193 (03/21 16:11)
#!/usr/bin/perl
open(READ, 'b.txt') or die "b.txt: $!\n";
@TMP=<READ>;
close(READ);
foreach(@TMP) {
chomp;
$DATA{join(':',$f1,$f2,$f3)}=$_
if( ($f1,$f2,$f3,undef,undef)=split(/ /) );
}
open(READ, 'a.txt') or die "a.txt: $!\n";
@TMP=<READ>;
close(READ);
foreach(@TMP) {
chomp;
printf("%s %s\n", $_, $DATA{join(':',$f1,$f3,$f4)})
if( ($f1,undef,$f3,$f4,undef)=split(/ /) );
}
以上可以跑范例...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.148.69