我有两个遗传数据集,它们具有匹配的染色体位置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
我发现了很多问题,需要提取匹配行,并根据这些问题应用了代码,但我只想获取2个文件之间匹配染色体位置的数量。
目前,我正在使用:
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
。
join <(awk -F '\t' '{print $125}' file1 | tail -n +2 | sort) <(awk -F '\t' '{print $1}' file2 | tail -n +2 | sort ) | wc -l
3
解释。
此解决方案假定列是制表符分隔的。使用awk
收集文件1的第125列和文件2的第一列。tail -n +2
删除收集结果的第一行。sort
是必需的,因为join
需要有序的文件。生成的相交集被提供给wc
它,返回其行数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句