使用 Perl 刪除 BerkeleyDB 行

使用 Perl 刪除 BerkeleyDB 行

我沒有使用 Perl 或 BerkelyDB 的經驗。我有一個巨大的 BerleleyDB,其中包含電子郵件清單和 unix 時間戳記。我需要幫助來刪除時間戳較舊(超過 100 天)的電子郵件。

我有這段 Perl 程式碼

#!/usr/local/perls/perl-5.26.1/bin/perl

  use BerkeleyDB;

  my $filename = '/usr/local/assp/whitelist.bdb';
  my $dbh = new BerkeleyDB::Hash(
          -Filename => $filename)
          or die "Error opening $filename : $! $BerkeleyDB::Error\n";

 my $cursor = $dbh->db_cursor() ;
    while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
        print "Key: " . $k . ", value: " . $v . "\n";

    }

### Close the Berkeley DB
untie $filename;
exit; 

顯示所有具有鍵 ($k) 和值 ($v) 的行

結果是這樣的

Key: [email protected], value: 1578560300
Key: [email protected],[email protected], value: 1578643050
Key: [email protected], value: 1578643050 

任何人都可以幫助我添加要在期間刪除的 Perl 程式碼儘管執行上面的命令,所有 unix 時間戳記值早於 100 天的鍵行?

答案1

只需使用c_del 據記錄, IE

my $long_ago = time() - 100*24*60*60; # 100 days ago
...
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
    if ($v<$long_ago) {
        $cursor->c_del();
    }
}

相關內容