Blob Blame History Raw
# split.awk --- do split in awk
#
# Requires ord() and chr() library functions
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# May 1993
# Revised slightly, May 2014

# usage: split [-count] [file] [outname]

BEGIN {
    outfile = "x"    # default
    count = 1000
    if (ARGC > 4)
        usage()

    i = 1
    if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) {
        count = -ARGV[i]
        ARGV[i] = ""
        i++
    }
    # test argv in case reading from stdin instead of file
    if (i in ARGV)
        i++    # skip datafile name
    if (i in ARGV) {
        outfile = ARGV[i]
        ARGV[i] = ""
    }
    s1 = s2 = "a"
    out = (outfile s1 s2)
}
{
    if (++tcount > count) {
        close(out)
        if (s2 == "z") {
            if (s1 == "z") {
                printf("split: %s is too large to split\n",
                       FILENAME) > "/dev/stderr"
                exit 1
            }
            s1 = chr(ord(s1) + 1)
            s2 = "a"
        }
        else
            s2 = chr(ord(s2) + 1)
        out = (outfile s1 s2)
        tcount = 1
    }
    print > out
}
function usage()
{
    print("usage: split [-num] [file] [outname]") > "/dev/stderr"
    exit 1
}