Ich habe keine Erfahrung mit Perl oder BerkelyDB. Ich habe eine riesige BerleleyDB mit einer Liste von E-Mails und einem Unix-Zeitstempel. Ich brauche Hilfe beim Entfernen von E-Mails mit älterem Zeitstempel, der älter als 100 Tage ist.
Ich habe diesen Abschnitt des Perl-Codes
#!/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;
zeigt alle Zeilen mit einem Schlüssel ($k) und einem Wert ($v)
Das Ergebnis ist ungefähr so
Key: [email protected], value: 1578560300
Key: [email protected],[email protected], value: 1578643050
Key: [email protected], value: 1578643050
Kann mir jemand helfen, Perl-Code hinzuzufügen, der während deswährendAusführung oben, alle Schlüsselzeilen mit Unix-Zeitstempelwert, der älter als 100 Tage ist?
Antwort1
Benutz einfachc_del
wie dokumentiert, dh
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();
}
}