linux - 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
解决方案
awk -F "\t" '$1 == "chr6" && $2 < 31510225 && $2 > 31497996' file.vcf
但这与使用tabix或bcftools查询索引的 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