##################################
#                                #
# Last modified 2025/05/25       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import os

def run():

    if len(sys.argv) < 3:
        print 'usage: python %s inputfilename chunksize outfileprefix [-splitIntoFolders prefix N_folders N_files_per_folder]' % sys.argv[0]
        print '\tnote: use - instead of an input filename to indicate standard input' 
        sys.exit(1)

    inputfilename = sys.argv[1]
    chunksize = int(sys.argv[2])
    outfileprefix = sys.argv[3]

    doSplitIntoFolders = False
    if '-splitIntoFolders' in sys.argv:
        doSplitIntoFolders = True
        SIFprefix = sys.argv[sys.argv.index('-splitIntoFolders') + 1]
        SIFNfolders = int(sys.argv[sys.argv.index('-splitIntoFolders') + 2])
        for i in range(SIFNfolders):
            cmd = 'mkdir ' + SIFprefix + str(i)
            p = os.popen(cmd, "r")
        SIFNfiles = int(sys.argv[sys.argv.index('-splitIntoFolders') + 3])

    doStdInput = False
    if inputfilename == '-':
        doStdInput = True

    chunks=0
    F=0
    if doSplitIntoFolders:
        outfile=open(SIFprefix + '0/' + outfileprefix + '0','w')
    else:
        outfile=open(outfileprefix+'0','w')
    if doStdInput:
        input_stream = sys.stdin
    else:
        input_stream = open(inputfilename)
    i=0
    for line in input_stream:
        i+=1
        outfile.write(line)
        if i % chunksize == 0:
            if doSplitIntoFolders:
                print 'closing', SIFprefix + str(F) + '/' + outfileprefix + str(chunks)
                chunks+=1
                outfile.close()
                F = (i - (i % chunksize))/SIFNfiles
                outfile = open(SIFprefix + str(F) + '/' + outfileprefix + str(chunks),'w')
            else:
                print 'closing', outfileprefix+str(chunks)
                chunks+=1
                outfile.close()
                outfile = open(outfileprefix+str(chunks),'w')
        
    outfile.close()

run()

