1

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

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
4

1 回答 1

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)
于 2019-03-14T13:09:43.630 回答