Blame awklib/eg/prog/split.awk

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