Specification of the "sequ" command
Copyright © 2013 Bart Massey
Revision 0: 1 October 2013
This specification describes the "universal sequence"
sequ command is a backward-compatible
set of extensions to the UNIX
command. There are many implementations of
seq out there:
this specification is built on the
seq supplied with GNU
Coreutils version 8.21.
seq command emits a monotonically increasing sequence
of numbers. It is most commonly used in shell scripting:
TOTAL=0 for i in `seq 1 10` do TOTAL=`expr $i + $TOTAL` done echo $TOTAL
prints 55 on standard output. The full
sequ command does
this basic counting operation, plus much more.
This specification of
sequ is in several stages, known as
compliance levels. Each compliance level adds required
functionality to the
sequ specification. Level 1
compliance is equivalent to the Coreutils
The usual specification language applies to this document: MAY, SHOULD, MUST (and their negations) are used in the standard fashion.
Wherever the specification indicates an error, a conforming
sequ implementation MUST immediately issue appropriate
error message specific to the problem. The implementation
then MUST exit, with a status indicating failure to the
invoking process or system. On UNIX systems, the error MUST
be indicated by exiting with status code 1.
When a conforming
sequ implementation successfully
completes its output, it MUST immediately exit, with a
status indicating success to the invoking process or
systems. On UNIX systems, success MUST be indicated by
exiting with status code 0.
Compliance Level 0
Compliance Level 0 of
sequ requires absolute minimum
functionality. A CL0
sequ MUST accept exactly two
command-line arguments. Each argument SHOULD be a
representation of an integer value. Any other supplied
argument syntax is an error.
If the first integer argument is numerically greater than
the second, the
sequ command MUST emit no
sequ MUST print on its output each of
the integers between the first and second argument,
inclusive. Each output integer MUST be on a line by itself,
that is, a line terminated with an appropriate line
terminator for the host environment.
Compliance Level 1
Compliance Level 1 of
sequ adds the full functionality of
seq. This includes the "--format",
"--separator", "--equal-width", "--help" and "--version"
arguments (as well as the one-character abbreviations of
these), the increment argument, and support for
floating-point numbers. The
sequ initialization and
increment arguments are now optional, as per the
sequ "--format" specifier MAY format floating-point
numbers differently than
seq, but it MUST follow some
well-described and reasonable floating-point formatting
Backslash-escapes in the "-s" argument string MUST be processed as in C printf(3).
Compliance Level 2
Compliance Level 2 of
sequ adds additional convenience
arguments for formatting.
The arguments that MUST be accepted are as follows:
-W, --words: Output the sequence as a single space-separated line. Equivalent to "-s ' '".
: Output the sequence with elements padded on the left to be all of equal width: the pad character is given by the single-char pad string . Backslash-escapes in MUST be processed as in C printf(3).
Note that the "-w" command of level 2 is equivalent to "-p '0'".
-P, --pad-spaces: Output the sequence with elements padded with spaces on the left to be all of equal width. Equivalent to "-p ' '".
Compliance Level 3
Compliance Level 3 of
sequ adds the ability to have
sequences of types other than floating-point numbers.
sequ MUST accept as arguments and output
as results: arbitrary-precision integers, single lowercase
alphabetic (ASCII) letters, single uppercase alphabetic
(ASCII) letters, and lowercase or uppercase unsigned Roman
sequ command MUST accept a new flag, "--format-word"
or "-F", that takes a one-word argument indicating the type
of the sequence. The
sequ command MUST accept the
format-word arguments "arabic" (for integers), "floating",
"alpha" (for letters), "ALPHA", "roman" or "ROMAN"; the
all-uppercase variants indicate uppercase sequences.
sequ command MUST accept limit arguments (start,
end, and increment) in the format consistent with the
format-word. Arabic limit arguments MAY be "promoted" to
Roman Numerals when Roman output is requested. The
increment argument for alpha formats MUST be arabic.
Otherwise, the limit arguments MUST be in the same format as
the format-word. When no format-word is given, the format
MUST be inferred from the format of the mandatory end
Compliance Level 4
Compliance Level 4 of
sequ adds the ability to number the
lines of a textfile presented on the input.
sequ MUST accept the "--number-lines" / "-n"
argument. This argument indicates that, rather than
outputting the sequence on standard output,
sequ will act
as a filter, numbering lines of a file read from standard
input to standard output. Each line "number" will be in the
format specified by the "--format-word" argument, or
inferred from the start or increment limit argument if
the "--format-word" argument is not supplied. The end
argument is irrelevant when "--number-lines" is supplied; it
MUST NOT be accepted. The separator between the line number
and the line may be given by the "--separator" argument,
defaulting to space.
Compliance Level 5
Compliance Level 5 of
sequ adds the ability to infer a
sequence from a given prefix.
As an alternative to the limit arguments of previous
Compliance Levels, CL5
sequ may accept a sequence
specifier of the form:
value [value] [value] ... ".." value
When the ".." argument is present, the non-flag arguments MUST be parsed in inference mode.
In inference mode,
sequ picks a best match for the
pattern (partial sequence of values leading up to the
".."), and then continues the sequence until the end value
(after the "..") is succeeded.