uawdijnntqw1x1x1
IP : 216.73.216.23
Hostname : web17.us.cloudlogin.co
Kernel : Linux web17.us.cloudlogin.co 5.10.238-xeon-hst #1 SMP Thu Jun 5 12:15:42 UTC 2025 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
home
/
www
/
hallgroupsolutions.com
/
e61a0
/
..
/
..
/
..
/
..
/
bin
/
dbfilepivot
/
/
#!/usr/bin/perl # # dbfilepivot.pm # Copyright (C) 2011-2024 by John Heidemann <johnh@isi.edu> # # This program is distributed under terms of the GNU general # public license, version 2. See the file COPYING # in $dblibdir for details. # =head1 NAME dbfilepivot - pivot a table, converting multiple rows into single wide row =head1 SYNOPSIS dbfilepivot [-e empty] -k KeyField -p PivotField [-v ValueField] =head1 DESCRIPTION Pivot a table, converting multiple rows corresponding to the same key into a single wide row. In a normalized database, one might have data with a schema like (id, attribute, value), but sometimes it's more convenient to see the data with a schema like (id, attribute1, attribute2). (For example, gnuplot's stacked histograms requires denormalized data.) Dbfilepivot converts the normalized format to the denormalized, but sometimes useful, format. Here the "id" is the key, the attribute is the "pivot", and the value is, well, the optional "value". An example is clearer. A gradebook usually looks like: #fsdb name hw_1 hw_2 hw_3 John 97 98 99 Paul - 80 82 but a properly normalized format would represent it as: #fsdb name hw score John 1 97 John 2 98 John 3 99 Paul 2 80 Paul 3 82 This tool converts the second form into the first, when used as dbfilepivot -k name -p hw -v score or dbfilepivot --possible-pivots='1 2 3' -k name -p hw -v score Here name is the I<key> column that indicates which rows belong to the same entity, hw is the I<pivot> column that will be indicate which column in the output is relevant, and score is the I<value> that indicates what goes in the output. The pivot creates a new column C<key_tag1>, C<key_tag2>, etc. for each tag, the contents of the pivot field in the input. It then populates those new columns with the contents of the value field in the input. If no value column is specified, then values are either empty or 1. Dbfilepivot assumes all lines with the same key are adjacent in the input source, like L<dbmapreduce(1)> with the F<-S> option. To enforce this invariant, by default, it I<requires> input be sorted by key. There is no requirement that the pivot field be sorted (provided the key field is already sorted). By default, dbfilepivot makes two passes over its data and so requires temporary disk space equal to the input size. With the B<--possible-pivots> option, the user can specify pivots and skip the second pass and avoid temporary data storage. Memory usage is proportional to the number of unique pivot values. The inverse of this commend is L<dbcolsplittorows>. =head1 OPTIONS =over 4 =item B<-k> or B<--key> KeyField specify which column is the key for grouping. Required (no default). =item B<-p> or B<--pivot> PivotField specify which column is the key to indicate which column in the output is relevant. Required (no default). =item B<-v> or B<--value> ValueField Specify which column is the value in the output. If none is given, 1 is used for the value. =item B<--possible-pivots PP> Specify all possible pivot values as PP, a whitespace-separated list. With this option, data is processed only once (not twice). =item B<-C S> or B<--element-separator S> Specify the separator I<S> used to join the input's key column with its contents. (Defaults to a single underscore.) =item B<-e E> or B<--empty E> give value E as the value for empty (null) records =item B<-S> or B<--pre-sorted> Assume data is already grouped by key. Provided twice, it removes the validation of this assertion. By default, we sort by key. =item B<-T TmpDir> or B<--tmpdir TmpDir> where to put tmp files. Also uses environment variable TMPDIR, if -T is not specified. Default is /tmp. =back =for comment begin_standard_fsdb_options This module also supports the standard fsdb options: =over 4 =item B<-d> Enable debugging output. =item B<-i> or B<--input> InputSource Read from InputSource, typically a file name, or C<-> for standard input, or (if in Perl) a IO::Handle, Fsdb::IO or Fsdb::BoundedQueue objects. =item B<-o> or B<--output> OutputDestination Write to OutputDestination, typically a file name, or C<-> for standard output, or (if in Perl) a IO::Handle, Fsdb::IO or Fsdb::BoundedQueue objects. =item B<--autorun> or B<--noautorun> By default, programs process automatically, but Fsdb::Filter objects in Perl do not run until you invoke the run() method. The C<--(no)autorun> option controls that behavior within Perl. =item B<--help> Show help. =item B<--man> Show full manual. =back =for comment end_standard_fsdb_options =head1 SAMPLE USAGE =head2 Input: #fsdb name hw score John 1 97 John 2 98 John 3 99 Paul 2 80 Paul 3 82 =head2 Command: cat data.fsdb | dbfilepivot -k name -p hw -v score =head2 Output: #fsdb name hw_1 hw_2 hw_3 John 97 98 99 Paul - 80 82 # | dbfilepivot -k name -p hw -v score =head1 SEE ALSO L<Fsdb(3)>. L<dbcolmerge(1)>. L<dbcolsplittorows(1)>. L<dbcolsplittocols(1)>. =cut # WARNING: This code is derived from dbfilepivot.pm; that is the master copy. use Fsdb::Filter::dbfilepivot; my $f = new Fsdb::Filter::dbfilepivot(@ARGV); $f->setup_run_finish; # or could just --autorun exit 0; =head1 AUTHOR and COPYRIGHT Copyright (C) 2011-2024 by John Heidemann <johnh@isi.edu> This program is distributed under terms of the GNU general public license, version 2. See the file COPYING with the distribution for details. =cut 1;
/home/www/hallgroupsolutions.com/e61a0/../../../../bin/dbfilepivot