=head1 NAME
recs-fromcsv
=head1 recs-fromcsv --help-all
Help from: --help-basic:
Usage: recs-fromcsv <args> [<files>]
Each line of input (or lines of <files>) is
split
on csv to produce an output
record. Fields are named numerically (0, 1, etc.) or as
given
by --field.
Arguments:
--key|k <
keys
> Comma separated list of field names. May be
specified multiple
times
, may be key specs
--header Take field names from the first line of input
--strict Do not trim whitespaces, allow loose quoting
(quotes inside qutoes), or allow the
use
of
escape characters
when
not strictly needed. (not
recommended,
for
most cases)
--filename-key|fk <keyspec> Add a key
with
the source filename (
if
no
filename is applicable will put NONE)
Help Options:
--help-all Output all help
for
this script
--help This help screen
--help-keyspecs Help on keyspecs, a way to
index
deeply and
with
regexes
Examples:
Parse csv separated fields x and y.
recs-fromcsv --field x,y
Parse data
with
a header line specifying fields
recs-fromcsv --header
Help from: --help-keyspecs:
KEY SPECS
A key spec is short way of specifying a field
with
prefixes or regular
expressions, it may also be nested into hashes and arrays. Use a
'/'
to nest
into a hash and a
'#NUM'
to
index
into an array (i.e. #2)
An example is in order, take a record like this:
{
"biz"
:[
"a"
,
"b"
,
"c"
],
"foo"
:{
"bar 1"
:1},
"zap"
:
"blah1"
}
{
"biz"
:[
"a"
,
"b"
,
"c"
],
"foo"
:{
"bar 1"
:2},
"zap"
:
"blah2"
}
{
"biz"
:[
"a"
,
"b"
,
"c"
],
"foo"
:{
"bar 1"
:3},
"zap"
:
"blah3"
}
In this case a key spec of
'foo/bar 1'
would have the
values
1,2, and 3 in
the respective records.
Similarly,
'biz/#0'
would have the value of
'a'
for
all 3 records
You can also prefix key specs
with
'@'
to engage the fuzzy matching logic
Fuzzy matching works like this in order, first key to match wins
1. Exact match ( eq )
2. Prefix match ( m/^/ )
3. Match anywehre in the key (m//)
So, in the above example
'@b/#2'
, the
'b'
portion would expand to
'biz'
and 2
would be the
index
into the array, so all records would have the value of
'c'
Simiarly,
@f
/b would have
values
1, 2, and 3
You can escape /
with
a \. For example,
if
you have a record:
{
"foo/bar"
:2}
You can address that key
with
foo\/bar
=head1 See Also
=over
=item L<RecordStream(3)> - Overview of the scripts and the
system
=item L<recs-examples(3)> - A set of simple recs examples
=item L<recs-story(3)> - A humorous introduction to RecordStream
=item SCRIPT --help - every script
has
a --help option, like the output above
=back