Hi.
An alternate awk solution:
Code:
#!/usr/bin/env sh
# @(#) s1 Demonstrate extraction of range to separate files.
# ____
# /
# | Infrastructure BEGIN
echo
set -o nounset
debug=":"
debug="echo"
## The shebang using "env" line is designed for portability. For
# higher security, use:
#
# #!/bin/sh -
## Use local command version for the commands in this demonstration.
set +o nounset
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) awk my-nl
set -o nounset
# Use nawk or /usr/xpg4/bin/awk on Solaris.
echo
FILE=${1-data1}
echo " Input file $FILE:"
cat $FILE
# | Infrastructure END
# \
# ---
echo
echo " Results from processing:"
awk '
BEGIN { i = 0 }
/ST/ { i++ ; name = "file" i }
/ST/,/SE/ { print > name }
' $FILE
my-nl file?
exit 0
Producing:
Code:
% ./s1
(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
GNU Awk 3.1.4
my-nl (local) 296
Input file data1:
ST
first invoice
SE
ST
second invoice
SE
ST
third invoice
SE
Results from processing:
==> file1 <==
1 ST
2 first invoice
3 SE
==> file2 <==
1 ST
2 second invoice
3 SE
==> file3 <==
1 ST
2 third invoice
3 SE
Choose the base file name you wish in variable "name" ... cheers, drl