我有一个以下格式的文件:
ENSG00000087510 ENST00000201031 TFAP2C transcription_factor protein_coding
每列之间用制表符分隔的位置。
如您所见,共有5列。第1列是冗余ID的列表,每个ID与第2列中的另一个唯一ID匹配。第1列中的冗余ID分散在整个文件中。
我尝试使用以下命令从第一列生成唯一的ID列表,但我不知道如何将其与第二列匹配。
cat Chr20_gene_transcript_namelist.txt | cut -f 1 | sort | uniq
我想要一个两列的文件:第1列中的唯一ID,第2列中与它们匹配的所有ID。
例如:
ENSG00000087510 ENST00000201031
ENST00000202017
ENST00000217133
ENSG00000100983 ENST00000217131
ENST00000217246
ENST00000237527
ENSG00000132823 ENST00000255174
答案 0 :(得分:0)
我不确定如何在bash中执行此操作,但是由于您使用了python标签,因此下面的脚本应该可以工作:
with open(<your_file>, 'r') as f:
lines = f.read().splitlines()
id_dict = {}
for line in lines:
elems = line.split()
if elems[0] in id_dict:
id_dict[elems[0]].append(elems[1])
else:
id_dict[elems[0]] = [elems[1]]
with open(<your_output_file>, 'w') as f:
for redundant_id, unique_ids in id_dict.items():
f.write('%s\t%s\n' % (redundant_id, unique_ids[0]))
for unique_id in unique_ids[1:]:
f.write('\t%s\n' % unique_id)