From 978bf233a782c62f6ea33399b4effc98bcf2c6a6 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Mon, 1 Nov 2010 23:15:14 +0000 Subject: [PATCH] * add update option, dump, and document options in db-hash --- db-hash | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/db-hash b/db-hash index 28f8209..db7066e 100755 --- a/db-hash +++ b/db-hash @@ -24,6 +24,9 @@ db-hash - create a database and query using it Options: --create, -c create dbname --update, -u update dbname, create if it doesn't exist + --dump, -D dump dbname + --missing-newline, -n output a newline for unhashed keys + --include-key, -k output the key as well as the value --debug, -d debugging level (Default 0) --help, -h display this help --man, -m display manual @@ -32,6 +35,28 @@ db-hash - create a database and query using it =over +=item B<--create,-c> + +Create a database + +=item B<--update,-u> + +Update a database; replaces all keys with the values loaded from the +file, but keeps existing keys which were not replaced + +=item B<--dump,-D> + +Dump database to stdout + +=item B<--include-key,-k> + +Output the key as well as the value. (Off by default) + +=item B<--missing-newline,-n> + +If a key doesn't exist in the database, output a newline. (Forced on +when --include-key set) + =item B<--debug, -d> Debug verbosity. (Default 0) @@ -61,10 +86,16 @@ my %options = (debug => 0, man => 0, create => 0, update => 0, + dump => 0, +# include_key => 0, + missing_newline => 1, ); GetOptions(\%options, 'create|c','update|u', + 'dump|D', + 'include_key|include-key|k!', + 'missing_newline|missing-newline|n!', 'debug|d+','help|h|?','man|m'); pod2usage() if $options{help}; @@ -94,8 +125,21 @@ else { die "Unable to open $db for writing: $!"; } +if (not defined $options{include_key}) { + $options{include_key} = $options{dump} ? 0 : 1; +} + + if ($options{update}) { - die "update currently not supported" + my %fast_db; + while () { + chomp; + my ($key,@val) = split /\t/; + $fast_db{$key} = [make_list($fast_db{$key} // [],@val)]; + } + for my $key (keys %fast_db) { + $t_db{$key} = $fast_db{$key}; + } } elsif ($options{create}) { my %fast_db; @@ -108,12 +152,36 @@ elsif ($options{create}) { $t_db{$key} = $fast_db{$key}; } } +elsif ($options{dump}) { + for my $key (keys %t_db) { + print "$key:".join("\t",make_list($t_db{$key}))."\n"; + } +} else { - if (@keys) { - print map {"$_\n"} map {make_list($t_db{$_} // [])} @keys; + if (!@keys) { + output_keys(); } else { - print map {"$_\n"} map {make_list($t_db{$_} // [])} ; + output_keys(@keys); + } +} + +sub output_keys { + my @temp = @_; + for my $key (@temp) { + if (not exists $t_db{$key}) { + chomp $key; + } + if ($options{include_key}) { + print $key."\t"; + } + if (exists $t_db{$key}) { + print join("\t",make_list($t_db{$key})); + print "\n"; + } + elsif ($options{missing_newline}) { + print "\n"; + } } } -- 2.39.2