X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=db-hash;h=9b159ff85d716e5d3ee484a37afc1f8e2bf34679;hb=1886c7247cb16ed68a78cd5550b152689a465999;hp=d9ad8af30d0746c9b89e9e35da16ef65ac5efcfb;hpb=3300ac8c577fe9138b330f7b8f596963085852ac;p=bin.git diff --git a/db-hash b/db-hash index d9ad8af..9b159ff 100755 --- a/db-hash +++ b/db-hash @@ -1,9 +1,8 @@ #! /usr/bin/perl -# , and is released +# db-hash creates databases and queries it, and is released # under the terms of the GPL version 2, or any later version, at your # option. See the file README and COPYING for more information. -# Copyright 2009 by Don Armstrong . -# $Id: perl_script 1432 2009-04-21 02:42:41Z don $ +# Copyright 2009-11 by Don Armstrong . use warnings; @@ -27,6 +26,8 @@ db-hash - create a database and query using it --dump, -D dump dbname --missing-newline, -n output a newline for unhashed keys --include-key, -k output the key as well as the value + --reverse, -r reverse (values to key) + --key-to-itself map key to itself --debug, -d debugging level (Default 0) --help, -h display this help --man, -m display manual @@ -52,6 +53,14 @@ Dump database to stdout Output the key as well as the value. (Off by default) +=item B<--reverse> + +Map values to a key + +=item B<--key-to-itself> + +Map the key to itself (On by default in reverse hashes) + =item B<--missing-newline,-n> If a key doesn't exist in the database, output a newline. (Forced on @@ -102,6 +111,7 @@ GetOptions(\%options, 'dump|D', 'include_key|include-key|k!', 'reverse|r!', + 'key_to_itself|key-to-itself|K', 'missing_newline|missing-newline|n!', 'debug|d+','help|h|?','man|m'); @@ -132,6 +142,12 @@ else { die "Unable to open $db for writing: $!"; } +if ($options{reverse}) { + if (not exists $options{key_to_itself}) { + $options{key_to_itself} = 1; + } +} + if (not defined $options{include_key}) { $options{include_key} = $options{dump} ? 0 : 1; } @@ -143,8 +159,8 @@ if ($options{update} or $options{create}) { chomp; my ($key,@val) = split /\t/; if ($options{reverse}) { - for my $val_key (@val) { - $fast_db{$val_key} = [make_list($fast_db{$val_key})//[],$key]; + for my $val_key (@val,$options{key_to_itself}?$key:()) { + $fast_db{$val_key} = [make_list($fast_db{$val_key} // []),$key]; } } else {