diff --git a/scripts/addInfos.py b/scripts/addInfos.py new file mode 100755 index 0000000000000000000000000000000000000000..b5a7117c474957d1561ca2bd0ee8a8b8729b400b --- /dev/null +++ b/scripts/addInfos.py @@ -0,0 +1,70 @@ +#! /usr/bin/python3 + +import sys + +################################################################################ +def printUsageAndExit() : + print("USAGE : %s infos.tsv baseFile.tsv keyColumnIndex defaultSymbol"%sys.argv[0], file=sys.stderr) + exit(1) +################################################################################ + +################################################################################ +def readInfos(filename) : + infos = {} + usualColNumber = -1 + for line in open(filename, 'r') : + if len(line) == 0 or '\t' not in line or line[0] == '#' : + continue + splited = line.strip().split('\t') + if usualColNumber == -1 : + usualColNumber = len(splited) + if len(splited) != usualColNumber : + print("WARNING : expected %d columns for line '%s'"%(usualColNumber, line.strip()), file=sys.stderr) + continue + if splited[0] in infos : + print("ERROR : redefinition of line '%s'"%line.strip(), file=sys.stderr) + exit(1) + infos[splited[0]] = splited[1:] + + return infos +################################################################################ + +################################################################################ +def pasteInfosToFile(filename, infos, colIndex, defaultSymbol) : + nbColsToAdd = 0 + for key in infos : + nbColsToAdd = len(infos[key]) + break + + for line in open(filename, 'r') : + if len(line) == 0 or '\t' not in line or line[0] == '#' : + print(line.strip()) + continue + splited = line.strip().split('\t') + if colIndex not in range(0,len(splited)) : + print("ERROR : column index '%d' not found in line '%s'"%(colIndex, line.strip()), file=sys.stderr) + exit(1) + if splited[colIndex] in infos : + for col in infos[splited[colIndex]] : + splited.append(col) + else : + for i in range(nbColsToAdd) : + splited.append(defaultSymbol) + print("\t".join(splited)) +################################################################################ + +################################################################################ +if __name__ == "__main__" : + if len(sys.argv) != 5 : + printUsageAndExit() + + infoFile = sys.argv[1] + baseFile = sys.argv[2] + colIndex = int(sys.argv[3]) + defaultSymbol = sys.argv[4] + + infos = readInfos(infoFile) + + pasteInfosToFile(baseFile, infos, colIndex, defaultSymbol) +################################################################################ +