我有两个具有匹配染色体位置 ID 的遗传数据集。我想计算文件 1 的染色体位置 ID 出现在文件 2 中的次数。
例如,我的数据如下所示:
文件 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
我发现很多问题都给出了匹配行的提取,并根据这些问题应用了代码,但我只想获得两个文件之间匹配染色体位置的计数。
目前我正在使用:
awk -F'|' 'NR==FNR{c[$125]++;next};c[$125]' file2.csv file1.txt > file3.txt
wc -l file1.txt
wc -l file3.txt
文件 1 和 3 的行数与我期望的不完全匹配(我希望所有文件 1 都在文件 2 中)并且为了确定发生了什么我需要找到一种方法来执行匹配计数染色体位置列中的行。如果我能找到一种方法来编码“文件 1 的所有染色体位置是否都匹配/出现在文件 3 中?” 这将是理想的,但即使只是计数现在也有效。
所以输出将是一个数字,计算文件 1 中染色体位置列 $125 与文件 2 染色体位置列 $1 匹配的次数。
我正在使用 Linux。
具有
awk
、tail
、sort
和join
的解wc
。解释。
此解决方案假定列是制表符分隔的。
awk
收集file1的第125列和file2的第一列。tail -n +2
删除收集结果的第一行。sort
是强制性的,因为join
需要有序文件。结果相交集被提供给wc
它返回它的行数。你很近。尝试
显然,并不是file1中的所有位置都在file2中找到。