Re: [問題] 兩檔案資料合併
※ 引述《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
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章