如何匹配一列中的唯一元素并列出第二列中的相应值

时间:2019-03-14 08:34:49

标签: python r unix text bioinformatics

我有一个以下格式的文件:

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

1 个答案:

答案 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)