##################################
#                                #
# Last modified 2017/07/11       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys

def run():

    if len(sys.argv) < 2:
        print 'usage: python %s <list of files> outputfilename' % sys.argv[0]
        print '	Format of input file: <lable> <tab> <filename>'
        sys.exit(1)

    input = sys.argv[1]
    outputfilename = sys.argv[2]

    DataDict={}
    LabelList=[]

    lineslist = open(input)
    for line1 in lineslist:
        if line1.strip() == '':
            continue
        fields = line1.strip().split('\t')
        label = fields[0]
        file = fields[1]
        listoflines = open(file)
        LabelList.append(label)
        for line in listoflines:
            if '\t' in line:
                pass
            else:
                continue
            fields = line.strip().split('\t')
            category = fields[0]
            counts = fields[1]
            if DataDict.has_key(category):
                DataDict[category][label] = counts
            else:
                DataDict[category] = {}
                DataDict[category][label] = counts

    outfile=open(outputfilename, 'w')

    CatKeys=DataDict.keys()
    CatKeys.sort()
    outline='#'
    for Category in CatKeys:
        outline=outline+'\t'+Category
    outfile.write(outline+'\n')
    LabelList.sort()
    for label in LabelList:
        outline=label
        for Category in CatKeys:
            if DataDict[Category].has_key(label):
                outline = outline + '\t' + DataDict[Category][label]
            else:
                outline = outline + '\t' + 'nan'
        outfile.write(outline+'\n')
        
    outfile.close()

run()
