Provided by: radiance_4R1+20120125-1.1_amd64 bug

NAME

       rcalc - record calculator

SYNOPSIS

       rcalc  [ -b ][ -l ][ -p ][ -n ][ -w ][ -u ][ -tS ][ -i format ][ -o format ][ -f source ][
       -e expr ][ -s svar=sval ] file ..

DESCRIPTION

       Rcalc transforms ``records'' from each file according to the  given  set  of  literal  and
       relational  information.   By  default,  records  are  separated  by newlines, and contain
       numeric fields separated by tabs.  The -tS option is used  to  specify  an  alternate  tab
       character.

       A  -i  format option specifies a template for an alternate input record format.  Format is
       interpreted as a specification string if it contains a dollar sign '$'.  Otherwise, it  is
       interpreted  as the name of the file containing the format specification.  In either case,
       if the format does not end with a newline, one will be  added  automatically.   A  special
       form  of  the  -i  option  may  be followed immediately by a 'd' or an 'f' and an optional
       count, which defaults to 1, indicating the number of double or float binary values to read
       per record on the input file.  If the input is byte-swapped, the -iD or -iF options may be
       substituted.  If binary input is specified, no format string or file is needed.

       A -o format option specifies an alternate output record format.   It  is  interpreted  the
       same  as an input specification, except that the special -od or -of options do not require
       a count, as this will be determined  by  the  number  of  output  channels  in  the  given
       expressions.   If  byte-swapped  output  is  desired,  the  -oD  or  -oF  options  may  be
       substituted.

       The -p option specifies "passive mode," where characters  that  do  not  match  the  input
       format  are  passed  unaltered to the output.  This option has no effect unless -i is also
       specified, and does not make much sense unless -o is also  given.   With  both  input  and
       output formats, the passive mode can effectively substitute information in the middle of a
       file or stream without affecting the rest of the data.

       The variable and function definitions in each -f source file are read and  compiled.   The
       -e  expr  option  can  be used to define variables on the command line.  Since many of the
       characters in an expression have special meaning  to  the  shell,  it  should  usually  be
       enclosed  in  single  quotes.   The  -s  svar=sval  option  can be used to assign a string
       variable a string value.  If this string variable appears in an input format, only records
       with the specified value will be processed.

       The  -b  option  instructs the program to accept only exact matches.  By default, tabs and
       spaces are ignored except as field separators.  The -l option  instructs  the  program  to
       ignore  newlines  in  the  input,  basically  treating  them  the same as tabs and spaces.
       Normally, the beginning of the input format matches the beginning of a line, and  the  end
       of  the  format matches the end of a line.  With the -l option, the input format can match
       anywhere on a line.

       The -w option causes non-fatal error messages (such as division by zero) to be  supressed.
       The  -u  option  causes  output  to be flushed after each record.  The -n option tells the
       program not to get any input, but to produce a single output  record.   Otherwise,  if  no
       files are given, the standard input is read.

       Format  files  associate  names  with  string  and  numeric  fields  separated  by literal
       information in a record.  A numeric field is given in a format  file  as  a  dollar  sign,
       followed by curly braces enclosing a variable name:

            This is a numeric field: ${vname}

       A string variable is enclosed in parentheses:

            This is a string field: $(sname)

       The  program  attempts  to  match literal information in the input format to its input and
       assign string and numeric fields accordingly.  If  a  string  or  numeric  field  variable
       appears more than once in the input format, input values for the corresponding fields must
       match (ie. have the same value) for the whole record to match.  Numeric values are allowed
       some  deviation,  on  the  order  of 0.1%, but string variables must match exactly.  Thus,
       dummy variables for "don't care" fields should be given unique names so that they are  not
       all required to take on the same value.

       For  each  valid  input  record, an output record is produced in its corresponding format.
       Output field widths are given implicitly  by  the  space  occupied  in  the  format  file,
       including  the  dollar  sign  and braces.  This makes it impossible to produce fields with
       fewer than four characters.  If the -b option is specified,  input  records  must  exactly
       match  the  template.   By  default, the character following each input field is used as a
       delimiter.  This implies that string fields  that  are  followed  by  white  space  cannot
       contain strings with white space.  Also, numeric fields followed but not preceded by white
       space will not accept  numbers  preceded  by  white  space.   Adjacent  input  fields  are
       advisable  only with the -b option.  Numeric output fields may contain expressions as well
       as variables.  A dollar sign may appear in a literal as two dollar signs ($$).

       The definitions specified in -e and -f options relate numeric  output  fields  to  numeric
       input  fields.  For the default record format, a field is a variable of the form $N, where
       N is the column number, beginning with 1.  Output columns appear on the left-hand side  of
       assignments, input columns appear on the right-hand side.

       A variable definition has the form:

            var = expression ;

       Any instance of the variable in an expression will be replaced with its definition.

       An  expression  contains  real  numbers, variable names, function calls, and the following
       operators:

            +  -  *  /  ^

       Operators are evaluated left to right.  Powers have the highest precedence; multiplication
       and  division  are  evaluated before addition and subtraction.  Expressions can be grouped
       with parentheses.  All values are double precision real.

       A function definition has the form:

            func(a1, a2, ..) = expression ;

       The expression can contain instances of the function arguments as well as other  variables
       and  functions.   Function  names  can be passed as arguments.  Recursive functions can be
       defined using calls to the  defined  function  or  other  functions  calling  the  defined
       function.

       The variable cond, if defined, will determine whether the current input record produces an
       output record.  If cond is positive, output is produced.  If cond is less than or equal to
       zero,  the  record  is  skipped  and  no other expressions are evaluated.  This provides a
       convenient method for avoiding inappropriate calculations.  The following library of  pre-
       defined functions and variables is provided:

       in(n)     Return  the value for input column n, or the number of columns available in this
                 record if n is 0.  This is an alternate way to get a  column  value  instead  of
                 using  the  $N  notation,  and  is more flexible since it is programmable.  This
                 function is disabled if an input format is used.

       if(cond, then, else)
                 if cond is greater than zero, then is evaluated, otherwise  else  is  evaluated.
                 This function is necessary for recursive definitions.

       select(N, a1, a2, ..)
                 return  aN  (N is rounded to the nearest integer).  This function provides array
                 capabilities.  If N is zero, the number of available arguments is returned.

       rand(x)   compute a random number between 0 and 1 based on x.

       floor(x)  return largest integer not greater than x.

       ceil(x)   return smallest integer not less than x.

       sqrt(x)   return square root of x.

       exp(x)    compute e to the power of x (e approx = 2.718281828).

       log(x)    compute the logarithm of x to the base e.

       log10(x)  compute the logarithm of x to the base 10.

       PI        the ratio of a circle's circumference to its diameter.

       recno     the number of records recognized thus far.

       outno     the number or records output thus far (including this one).

       sin(x), cos(x), tan(x)
                 trigonometric functions.

       asin(x), acos(x), atan(x)
                 inverse trigonometric functions.

       atan2(y, x)
                 inverse tangent of y/x (range -pi to pi).

EXAMPLE

       To print the square root of column two in column one, and column one times column three in
       column two:

         rcalc -e '$1=sqrt($2);$2=$1*$3' inputfile > outputfile

AUTHOR

       Greg Ward

BUGS

       String  variables  can  only  be  used  in input and output formats and -s options, not in
       definitions.

       Tabs count as single spaces inside fields.

SEE ALSO

       cnt(1), ev(1), getinfo(1), icalc(1), rlam(1), tabfunc(1), total(1)