##################################
#                                #
# Last modified 2025/01/15       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
import os
from sets import Set

def run():

    if len(sys.argv) < 2:
        print 'usage: python %s datafilename <fields to merge (0,1,2,...)>' % sys.argv[0]
        sys.exit(1)

    datafilename = sys.argv[1]
    fieldsToMerge=[]
    for ID in sys.argv[2].split(','):
        fieldsToMerge.append(int(ID))

    if datafilename.endswith('.bz2'):
        cmd = 'bzip2 -cd ' + datafilename
    elif datafilename.endswith('.gz') or datafilename.endswith('.bgz'):
        cmd = 'zcat ' + datafilename
    else:
        cmd = 'cat ' + datafilename
    p = os.popen(cmd, "r")
    line = 'line'
    while line != '':
        line = p.readline()
        if line == '':
            break
        fields = line.strip().split('\t')
        if len(fields) < max(fieldsToMerge):
            continue
        outline=''
        if line.startswith('#'):
            outline = '#'
        for ID in fieldsToMerge:
            outline = outline + fields[ID] + '_'
        outline = outline[0:-1]
        for ID in range(len(fields)):
            if ID in fieldsToMerge:
                continue
            else:
                outline = outline + '\t' + fields[ID]
        print outline.strip()
        
run()

