Re: [請益] 兩份log差異比較
nash7555 您好,
粗略看來,您的程式前兩段是將原 log 檔進行一點過濾,並將篩完之後的
成果存去 TEMPNEW, TEMPORI 。而最後將兩檔比對的結果存去 DIFFLIST。
最後一段卡關點的程式碼尚不完全,但從您的文字描述看來,您預期
TEMPNEW 與 TEMPORI 內容會有部份重複,而這程式的主要目的,則是要
將重複的部份消除後輸出到 DIFFLIST。
以下是我的幾點建議:
1. 或許可以將檔案全數讀到記憶體中試試。如果是讀成兩個陣列的話,
或許以下這段程式碼就能解決前述問題:
my @content_c;
for my $line_a (@content_a) {
my $dup = 0;
for my $line_b (@content_b) {
if ($line_a eq $line_b) {
$dup = 1;
last;
}
}
if ($dup) {
push @content_c, $line_a;
}
}
print DIFFLIST $_ for @content_c;
雖然我不知道實際上您的要處理的這兩個檔案多大,
會不會把記憶體全用掉這我就無法判斷了。
2. 如果因故必須採用暫存檔的做法,我印象中,比須使用
seek() (perldoc -f seek) 在適當的時機將檔案游標移回開頭,例如:
while (my $line_a = <TEMPNEW>) {
my $dup = 0;
seek(TEMPORI, 0, 0);
while(my $line_b = <TEMPORI>) {
...
}
...
}
3. 如果可以使用 cpan 模組 List::Util 中的 `uniq` 函式,前述 (1) 的部份
可以簡化為一行:
my @content_c = uniq(@content_a, @content_b);
以上。提供給您參考。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.134.77 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1585533271.A.F1B.html
推
03/30 22:07,
4年前
, 1F
03/30 22:07, 1F
推
04/02 07:31,
4年前
, 2F
04/02 07:31, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
1
Perl 近期熱門文章
PTT數位生活區 即時熱門文章