##################################
#                                #
# Last modified 06/16/2010       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
from sets import Set

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s  <data filename> <data fields (comma separated)><wanted filename> <wanted fields (comma separated)> <outfilename>' % sys.argv[0]
        sys.exit(1)

    data = sys.argv[1]

    dataFields=[]
    fields=sys.argv[2].split(',')
    for f in fields:
        dataFields.append(int(f))

    wanted = sys.argv[3]

    wantedFields=[]
    fields=sys.argv[4].split(',')
    for f in fields:
        wantedFields.append(int(f))

    outfilename = sys.argv[5]

    wantedDict={}
    lineslist=open(wanted)
    for line in lineslist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        WantedID=[]
        for fieldID in wantedFields:
            WantedID.append(fields[fieldID])
        WantedID=tuple(WantedID)
        wantedDict[WantedID]=''

    outfile = open(outfilename, 'w')

    lineslist=open(data)
    for line in lineslist:
        if line.startswith('#'):
            outfile.write(line)
            continue
        fields=line.strip().split('\t')
        ID=[]
        for fieldID in dataFields:
            ID.append(fields[fieldID])
        ID=tuple(ID)
        if wantedDict.has_key(ID):
            outfile.write(line)

    outfile.close()

run()

