Blame awklib/eg/prog/split.awk

Packit 575503
# split.awk --- do split in awk
Packit 575503
#
Packit 575503
# Requires ord() and chr() library functions
Packit 575503
#
Packit 575503
# Arnold Robbins, arnold@skeeve.com, Public Domain
Packit 575503
# May 1993
Packit 575503
# Revised slightly, May 2014
Packit 575503
Packit 575503
# usage: split [-count] [file] [outname]
Packit 575503
Packit 575503
BEGIN {
Packit 575503
    outfile = "x"    # default
Packit 575503
    count = 1000
Packit 575503
    if (ARGC > 4)
Packit 575503
        usage()
Packit 575503
Packit 575503
    i = 1
Packit 575503
    if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) {
Packit 575503
        count = -ARGV[i]
Packit 575503
        ARGV[i] = ""
Packit 575503
        i++
Packit 575503
    }
Packit 575503
    # test argv in case reading from stdin instead of file
Packit 575503
    if (i in ARGV)
Packit 575503
        i++    # skip datafile name
Packit 575503
    if (i in ARGV) {
Packit 575503
        outfile = ARGV[i]
Packit 575503
        ARGV[i] = ""
Packit 575503
    }
Packit 575503
    s1 = s2 = "a"
Packit 575503
    out = (outfile s1 s2)
Packit 575503
}
Packit 575503
{
Packit 575503
    if (++tcount > count) {
Packit 575503
        close(out)
Packit 575503
        if (s2 == "z") {
Packit 575503
            if (s1 == "z") {
Packit 575503
                printf("split: %s is too large to split\n",
Packit 575503
                       FILENAME) > "/dev/stderr"
Packit 575503
                exit 1
Packit 575503
            }
Packit 575503
            s1 = chr(ord(s1) + 1)
Packit 575503
            s2 = "a"
Packit 575503
        }
Packit 575503
        else
Packit 575503
            s2 = chr(ord(s2) + 1)
Packit 575503
        out = (outfile s1 s2)
Packit 575503
        tcount = 1
Packit 575503
    }
Packit 575503
    print > out
Packit 575503
}
Packit 575503
function usage()
Packit 575503
{
Packit 575503
    print("usage: split [-num] [file] [outname]") > "/dev/stderr"
Packit 575503
    exit 1
Packit 575503
}