This is the command rcalc that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
PROGRAM:
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
Use rcalc online using onworks.net services