如何根据另一个文件的列选择唯一的行?

如何根据另一个文件的列选择唯一的行?

我有 2 个遗传数据集。文件 1 是一个 txt 文件,其染色体 ID 也全部出现在文件 2 中。文件 2 是一个 csv 文件,比文件 1 大,并且具有更多唯一的染色体 ID。如何仅提取文件 2 中与文件 1 相比具有唯一染色体 ID 的行?

例如我的数据如下所示:

文件1(染色体位置实际上是我的第125列,由...暗示):

Gene  pval    ... Chromosome position ID
ACE   0.002   ... 01:3290834_CT_C_1
NOS   0.01    ... 03:3304593_GA_G_1
BRCA  0.004 . ... 06:6265733_GA_G_1
CYP3  0.34    ... 09:9433933_GA_G_1

文件2(染色体位置是我的第一列):

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002
03:3304593_GA_G_1       NOS   0.01
06:6265733_GA_G_1       BRCA  0.004
09:9433933_GA_G_1       CYP3  0.34

仅基于染色体位置 ID,仅出现在文件 2 中的输出唯一行将为:

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

我尝试使用uniqand获得此输出sort,但目前我只在网上找到使用多个文本文件的示例,但希望相反,它们采用匹配的 ID 行而不是唯一的 ID 行。我也尝试过,grep但由于这些文件很大,命令被终止。

答案1

修改其他线程中的解决方案(不包括 shell 扩展文件 [12]):

awk ' FNR==NR {P[$125]; next} FNR==1 || !($1 in P)' file1 file2
Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

相关内容