##################################
#                                #
# Last modified 2018/12/06       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s input input_filedID(s) order order_filedID(s) outfilename'
        sys.exit(1)

    input = sys.argv[1]
    fields = sys.argv[2].split(',')
    inputFieldIDs = []
    for f in fields:
        inputFieldIDs.append(int(f))
    order = sys.argv[3]
    fields = sys.argv[4].split(',')
    orderFieldIDs = []
    for f in fields:
        orderFieldIDs.append(int(f))
    outfilename = sys.argv[5]

    OrderDict1 = {}
    OrderDict2 = {}

    lineslist = open(order)
    i=0
    for line in lineslist:
        if line.startswith('#'):
            continue
        i+=1
        fields = line.strip().split('\t')
        label = []
        for ID in orderFieldIDs:
            label.append(fields[ID])
        label = tuple(label)
        OrderDict1[i] = label
        OrderDict2[label] = 0

    outfile = open(outfilename, 'w')

    lineslist = open(input)
    for line in lineslist:
        if line.startswith('#'):
            outfile.write(line.strip() + '\n')
            continue
        fields = line.strip().split('\t')
        label = []
        for ID in inputFieldIDs:
            label.append(fields[ID])
        label = tuple(label)
        if OrderDict2.has_key(label):
            OrderDict2[label] = line.strip()

    ordering = OrderDict1.keys()
    ordering.sort()

    for i in ordering:
        label = OrderDict1[i]
        if OrderDict2[label] != 0:
            outfile.write(OrderDict2[label] + '\n')

    outfile.close()
        
run()

