![如何根据另一个文件的列选择唯一的行?](https://linux22.com/image/166710/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%88%97%E9%80%89%E6%8B%A9%E5%94%AF%E4%B8%80%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
我有 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
我尝试使用uniq
and获得此输出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