首页 > 解决方案 > awk 函数比较器查找两个值之间的数据点

问题描述

我尝试使用 awk 运算符来查找 vcf 文件中的某些值。据推测,这应该在第 2 列中为我提供介于 31497996 和 31510225 之间的值。但这只会在该区域之外生成数字?

我还尝试在前面使用 +$2 将值从字符串转换为数字,但这也没有成功。

awk '$1=="chr6" && $2<"31510225" && $2>"31497996" {print $0}' test.vcf > test.txt

输出

chr6    3150515 rs3799216
chr6    3150783 rs3799218

标签: linuxawk

解决方案


awk -F "\t" '$1 == "chr6" && $2 < 31510225 && $2 > 31497996' file.vcf

但这与使用tabixbcftools查询索引的 VCF/BCF 文件相比会很慢。这些工具使查询其他位置变得容易且超快速,而无需再次遍历您的(通常)大型变体列表。改为考虑:

首先,bgzip(htslib)你的 VCF 文件:

bgzip file.vcf

其次,使用 tabix 或 bcftools 索引 bgzip 压缩的 VCF 文件:

# with tabix
tabix file.vcf.gz

# with bcftools
bcftools index file.vcf.gz

最后,通过提供区域字符串检索感兴趣的区域:

# with tabix
tabix file.vcf.gz chr6:31510225-31497996

# with bcftools
bcftools view file.vcf.gz chr6:31510225-31497996

推荐阅读